详解Python利用Pandas和 NumPy 库来进行数据清洗
文章目录
- 前言
- 准备工作
- 移除DataFrame中的某一列
- 修改DataFrame的索引设置
- 整理DataFrame的数据字段
- 通过结合str方法和NumPy库清理数据列
- 利用apply函数对整个数据集进行清洗处理
- 删除DataFrame中指定的行数据
- 给DataFrame列重新命名
-
- 关于Python技术储备
-
- 一、系统学习Python各类知识点的学习路线规划
- 学习Python基础视频课程推荐列表
- 精选Python学习书籍汇总
- 集成Python工具包及项目源码合集的学习路径规划
- Python工具包详细解析及应用实践指导(分三部分)
- Python实战案例分析与进阶技巧精讲(分三部分)
- Python小游戏开发与优化实现指南(分三部分)
- 面试中常考Python知识点总结及应对策略指导(分三部分)
- Python兼职渠道选择及操作流程详解(分三部分)
前言
大多数数据科学家普遍认为,在工作中头 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和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 函数来实现这一目标, 因为 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() 方法实现这一功能
例如将数据的发布日期进行处理成 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变得轻鬆易懂~插入图片的位置通常在内容下方或旁边

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

因篇幅有限,仅展示部分资料
三、精品Python学习书籍
当我在掌握了一定的基础知识并具备了独立思考能力之后

四、Python工具包+项目源码合集
①Python工具包
你可以在此找到所有常用Python开发工具。每一个都配有完整的安装指南,并确保你能够顺利地完成安装过程。
你可以在此找到所有常用Python开发工具。每一个都配有完整的安装指南,并确保你能够顺利地完成安装过程。

②Python实战案例
光学理论的应用价值较低,在编程实践中需掌握实践操作技能。只有通过亲自动手实践才能真正掌握所学知识。建议通过参与实战项目提升自己的技术能力,并结合丰富的实战案例进行深入学习。平台提供了超过100个实战案例源码供您参考和使用。

③Python小游戏源码
如果觉得上面的实战案例有些无聊呢?不妨试着用Python开发小游戏来丰富学习体验。

五、面试资料
学习Python的目的自然是寻求高薪机会;这些试题出自阿里、腾讯、字节等知名互联网企业的最新考题;并附有来自阿里的权威解析;通读这套试题后,相信每一位读者都能够获得理想的求职机会。


六、Python兼职渠道
而且学会Python以后,在多个各大兼职平台上承接工作任务并获得经济回报。为了更好地帮助自己积累经验,在各类兼职渠道的具体信息、注意事项以及与客户的沟通技巧上我都做出了系统性的整理,并制作成了电子版材料


保证100%免费
保证100%免费
绝对免费提供给所有用户
绝对免费提供给所有用户
绝对免费提供给所有用户

