如何用pandas读取并清洗数据,pandas数据清洗详细教程

  如何用pandas读取并清洗数据,pandas数据清洗详细教程

  许多数据科学家认为,获取和清理数据的初始步骤占了80%的工作,并花费大量时间清理数据集并将其还原为可用的形式。本文将使用Python的Pandas和NumPy库对数据进行清理,有需要可以参考。

  00-1010准备工作:DataFrame列的删除,DataFrame数据字段的DataFrame索引改变,str方法结合NumPy清理列,apply函数清理整个数据集,DataFrame跳过行,DataFrame重命名列,很多数据科学家认为数据获取和清理的初始步骤占了80%的工作,花费大量的时间清理数据集并还原成可用的形式。

  所以,如果你是刚刚进入这个领域,或者打算进入这个领域,重要的是能够处理杂乱的数据,无论数据是否包含缺失值、不一致的格式、畸形的记录或者无意义的离群值。

  Python的Pandas和NumPy库将用于清理数据。

  

目录

  导入模块后,开始正式的数据预处理。

  进口熊猫作为pd

  将numpy作为np导入

  

准备工作

  人们经常发现,并非数据集中的所有数据类别都是有用的。例如,可能有一个数据集包含学生信息(姓名、成绩、标准、父母姓名和地址),但您希望重点分析学生成绩。在这种情况下,地址或父母的名字并不重要。保存这些不必要的数据会占用不必要的空间。

  BL-Flickr-Images-Book.csv数据操作。

  Df=pd.read_csv (Pandas,NumPy数据科学进行数据清理所必需的/BL-Flickr-Images-Book.csv )

  df.head()

  可以看出,这些栏目没有版本声明、公司作者、公司投稿人、前所有者、雕刻者、发行类型和书架标记的信息,因此可以批量删除。

  to_drop_column=[ Edition语句,

  公司作者,

  公司出资人,

  前所有者,

  雕刻师,

  贡献者,

  发行类型,

  Shelfmarks]

  df.drop(to_drop_column,inplace=True,axis=1)

  df.head()

  

DataFrame 列的删除

  Pandas index扩展了NumPy数组的功能,允许更一般的切片和标记。在许多情况下,使用数据的唯一值标识字段作为其索引是很有帮助的。

  获取唯一标识符。

  df[标识符]。唯一性

  真实的

  标识符列替换了索引列。

  df=df.set_index(标识符)

  df.head()

  206是索引的第一个标签,可以使用df.iloc[0]基于位置的索引来访问它。

  

DataFrame 索引更改

  清理特定的列,并将其转换为统一的格式,以便更好地理解数据集并增强一致性。

  处理出版日期列,发现数据列的格式不统一。

  df.loc[1905:出版日期

  n'].head(10)

  

Identifier

  1905 1888

  1929 1839, 38-54

  2836 1897

  2854 1865

  2956 1860-63

  2957 1873

  3017 1866

  3131 1899

  4598 1814

  4884 1820

  Name: Date of Publication, dtype: object

  

  我们可以使用正则表达式的方式直接提取连续的4个数字即可。

  

extr = df[Date of Publication].str.extract(r^(\d{4}), expand=False)

  extr.head()

  Identifier

  206    1879

  216    1868

  218    1869

  472    1851

  480    1857

  Name: Date of Publication, dtype: object

  最后获取数字字段列。

  

df[Date of Publication] = pd.to_numeric(extr)

  

  

  

str 方法与 NumPy 结合清理列

  df[‘Date of Publication’].str 。 此属性是一种在 Pandas 中访问快速字符串操作的方法,这些操作在很大程度上模仿了对原生 Python 字符串或编译的正则表达式的操作,例如 .split()、.replace() 和 .capitalize()。

  要清理 Place of Publication 字段,我们可以将 Pandas 的 str 方法与 NumPy 的 np.where 函数结合起来,该函数基本上是 Excel 的 IF() 宏的矢量化形式。

  

np.where(condition, then, else)

  

  在这里 condition 要么是一个类似数组的对象,要么是一个布尔掩码。 then 是如果条件评估为 True 时使用的值,否则是要使用的值。

  本质上 .where() 获取用于条件的对象中的每个元素,检查该特定元素在条件上下文中的计算结果是否为 True,并返回一个包含 then 或 else 的 ndarray,具体取决于哪个适用。可以嵌套在复合 if-then 语句中,允许根据多个条件计算值.

  处理 Place of Publication 出版地 数据。

  

df[Place of Publication].head(10)

  Identifier

  206                                  London

  216                London; Virtue & Yorston

  218                                  London

  472                                  London

  480                                  London

  481                                  London

  519                                  London

  667     pp. 40. G. Bryan & Co: Oxford, 1898

  874                                 London]

  1143                                 London

  Name: Place of Publication, dtype: object

  使用包含的方式提取需要的数据信息。

  

pub = df[Place of Publication]

  london = pub.str.contains(London)

  london[:5]

  Identifier

  206    True

  216    True

  218    True

  472    True

  480    True

  Name: Place of Publication, dtype: bool

  也可以使用 np.where 处理。

  

df[Place of Publication] = np.where(london, London,

                                        pub.str.replace(-, )))

  Identifier

  206                     London

  216                     London

  218                     London

  472                     London

  480                     London

                    ...         

  4158088                 London

  4158128                  Derby

  4159563                 London

  4159587    Newcastle upon Tyne

  4160339                 London

  Name: Place of Publication, Length: 8287, dtype: object

  

  

apply 函数清理整个数据集

  在某些情况下,将自定义函数应用于 DataFrame 的每个单元格或元素。 Pandas.apply() 方法类似于内置的 map() 函数,只是将函数应用于 DataFrame 中的所有元素。

  例如将数据的发布日期进行处理成 xxxx 年的格式,就可以使用apply。

  

def clean_date(text):

   try:

   return str(int(text)) + "年"

   except:

   return text

  df["new_date"] = df["Date of Publication"].apply(clean_date)

  df["new_date"]

  Identifier

  206 1879年

  216 1868年

  218 1869年

  472 1851年

  480 1857年

   ...

  4158088 1838年

  4158128 1831年

  4159563 NaN

  4159587 1834年

  4160339 1834年

  Name: new_date, Length: 8287, dtype: object

  

  

  

DataFrame 跳过行

  

olympics_df = pd.read_csv(数据科学必备Pandas、NumPy进行数据清洗/olympics.csv)

  olympics_df.head()

  

  

  可以在读取数据时候添加参数跳过某些不要的行,比如索引 0 行。

  

olympics_df = pd.read_csv(数据科学必备Pandas、NumPy进行数据清洗/olympics.csv,header=1)

  olympics_df.head()

  

  

  

  

DataFrame 重命名列

  

new_names = {Unnamed: 0: Country,

   ? Summer: Summer Olympics,

   01 !: Gold,

   02 !: Silver,

   03 !: Bronze,

   ? Winter: Winter Olympics,

   01 !.1: Gold.1,

   02 !.1: Silver.1,

   03 !.1: Bronze.1,

   ? Games: # Games,

   01 !.2: Gold.2,

   02 !.2: Silver.2,

   03 !.2: Bronze.2}

  olympics_df.rename(columns=new_names, inplace=True)

  olympics_df.head()

  

  

  以上就是详解Python如何利用Pandas与NumPy进行数据清洗的详细内容,更多关于Python数据清洗的资料请关注盛行IT软件开发工作室其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: