文章目录
前言
许多数据科学家认为获取和清理数据的初始步骤占工作的 80%,花费大量时间来清理数据集并将它们归结为可以使用的形式。
因此如果你是刚刚踏入这个领域或计划踏入这个领域,重要的是能够处理杂乱的数据,无论数据是否包含缺失值、不一致的格式、格式错误的记录还是无意义的异常值。
将利用 Python 的 Pandas和 NumPy 库来清理数据。

准备工作
导入模块后就开始正式的数据预处理吧。
import pandas as pd
import numpy as np
DataFrame 列的删除
通常会发现并非数据集中的所有数据类别都有用。例如可能有一个包含学生信息(姓名、年级、标准、父母姓名和地址)的数据集,但希望专注于分析学生成绩。在这种情况下地址或父母的姓名并不重要。保留这些不需要的数据将占用不必要的空间。
BL-Flickr-Images-Book.csv 数据操作。
df = pd.read\_csv('数据科学必备Pandas、NumPy进行数据清洗/BL-Flickr-Images-Book.csv')
df.head()

可以看到这些列是对 Edition Statement, Corporate Author, Corporate Contributors, Former owner, Engraver, Issuance type and Shelfmarks 没有任何信息帮助的,因此可以进行批量删除处理。
to\_drop\_column = \[ 'Edition Statement',
'Corporate Author',
'Corporate Contributors',
'Former owner',
'Engraver',
'Contributors',
'Issuance type',
'Shelfmarks'\]
df.drop(to\_drop\_column , inplace=True, axis=1)
df.head()

DataFrame 索引更改
Pandas 索引扩展了 NumPy 数组的功能,以允许更通用的切片和标记。 在许多情况下,使用数据的唯一值标识字段作为其索引是有帮助的。
获取唯一标识符。
df\['Identifier'\].is\_unique
True
Identifier列替换索引列。
df = df.set\_index('Identifier')
df.head()

206 是索引的第一个标签,可以使用 df.iloc[0] 基于位置的索引访问。
DataFrame 数据字段整理
清理特定列并将它们转换为统一格式,以更好地理解数据集并强制保持一致性。
处理 Date of Publication 出版日期 列,发现该数据列格式并不统一。
df.loc[1905:, ‘Date of Publication’].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技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
👉优快云大礼包:《Python入门资料&实战源码&安装工具】免费领取(安全链接,放心点击)
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、Python基础学习视频
② 路线对应学习视频
还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述

③练习题
每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!

因篇幅有限,仅展示部分资料
三、精品Python学习书籍
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

四、Python工具包+项目源码合集
①Python工具包
学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!

②Python实战案例
光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!

③Python小游戏源码
如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!

五、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。


六、Python兼职渠道
而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。


这份完整版的Python全套学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】
本文详细介绍了如何使用Python的Pandas和NumPy库进行数据清洗,包括删除无用列、更改索引、整理数据字段、利用正则表达式和NumPy进行数据转换,以及应用apply函数等技巧。还提到了在数据预处理中的关键步骤和Python技术储备的学习资源。
1139

被折叠的 条评论
为什么被折叠?



