为什么用 pandas 清洗数据,而不是手动处理?
用 pandas 清洗数据是值得的,因为每一步都有记录,下个月导出数据后,几秒钟就能重新运行;而在电子表格中手动修正既慢,又容易遗漏,还无法审计。
设想一家虚构的园艺中心集团,名叫蕨山园艺,共有四个经营点。财务分析师托马什每月都会收到一份线上订单 CSV 文件。在下面的样本中,同一订单出现了两次,经营点名称有多种写法,金额含有货币符号和逗号,日期混用了日期在前和年份在前的格式,缺失值则以空白、“N/A”和“-”表示。手工修正需要一天时间,而且汇总金额总是与支付服务商的报告对不上。
| order_id | site | order_date | amount | postcode |
|---|---|---|---|---|
| 10231 | 利兹 | 03/11/2026 | £1,240.00 | LS6 |
| 10231 | 利兹 | 03/11/2026 | £1,240.00 | LS6 |
| 10232 | 利兹 | 2026-11-04 | 86.50 | 不适用 |
| 10233 | 约克 | 05/11/2026 | - | YO1 |
| 10234 | 哈罗盖特 | 142 |
如何逐步使用 pandas 清洗数据?
在 pandas 中清洗数据时,先在加载数据时声明缺失值标记,再检查数据、统一文本格式、转换数字和日期、删除重复项、决定如何处理剩余缺失值,最后用可信的汇总值核对结果。按这个顺序操作,可以避免后一步的修正破坏前一步的结果。
1. 加载时明确指定缺失值标记
pandas 的 read_csv 函数会将文件读入 DataFrame。除了 pandas 默认识别的空字段等缺失值外,你还可以通过 na_values 参数指定其他应视为缺失值的字符串,例如 'N/A' 和 '-'。在这里提前声明,就不用之后再逐一查找。
2. 做任何改动前先检查
用 head 查看前几行,用 info 查看各列的数据类型和非缺失值数量,再结合 isna 和 sum 统计每列的缺失值数量。记下你的发现:在 Fernhill 的数据中,amount 存储为文本,order_date 的格式不统一。
3. 规范文本
对列使用字符串方法:str.strip 去除首尾空格,str.lower 或 str.title 统一大小写,使 ' Leeds'、'leeds ' 和 'LEEDS' 归为同一个地点。然后使用 unique 列出不重复的值,查找剩余的拼写差异。
4. 转换数字
用 str.replace 删除货币符号和千位逗号,再用 to_numeric 转换为数值。将其 errors 参数设为 coerce,会把无法解析的内容转为缺失值,而不是中止处理。这样你就能统计并检查这些行,避免它们在不知情的情况下丢失。
5. 转换日期
to_datetime 可将文本转换为规范的日期。对于混合格式,尽量明确指定格式;对于英国式日期,可设置 dayfirst,并将 errors 设为 coerce,使无法解析的日期转换为 NaT,即 pandas 中表示日期缺失的标记。注意,dayfirst 只是优先选项,并非严格规则,因此要检查结果。
6. 删除重复项
drop_duplicates 用于移除重复行。默认情况下,只有每一列的值都相同,一行才会被视为重复行;其 subset 参数允许你根据指定列(如 order_id)判断重复,而 keep 决定保留第一条还是最后一条记录。
7. 决定如何处理剩余缺口
dropna 用于移除含缺失值的行,但默认情况下,只要任意一列存在缺失值,就会删除整行。使用其 subset 参数,可以只删除真正必需的列(如 amount)中存在缺失值的行;也可以用 fillna 将缺失值填充为指定值。然后使用 astype 设置各列的最终类型,例如将 site 设为分类类型。
较差的数据清洗和改进后的数据清洗分别是什么样的?
不可靠的处理方式是用 read_csv 加载文件,然后不带任何参数调用 dropna,再不带任何参数调用 drop_duplicates。由于邮政编码经常为空,dropna 会删除大量有效订单;而由于 ' Leeds' 和 'leeds ' 仍被视为不同的值,一些重复记录会保留下来。算出的营收远低于实际值,而且没人知道哪些行被删掉了。
改进后的处理在加载时将 'N/A' 和 '-' 声明为缺失值,去除 site 首尾空格并将每个单词的首字母大写,移除 '£' 和逗号后用 to_numeric 转换 amount,用 dayfirst 和 coerce 转换 order_date,按 order_id 判断重复并保留第一条记录,而且只删除 amount 缺失的行。随后输出每一步删除的行数,并将总收入与支付服务商的报告进行比较。现在,托马什能够解释每一处差异。
如何检查数据清洗是否有效?
检查数据清洗时,统计每一步操作前后的行数,将一项关键总数与独立来源进行比对,并检查被强制转换为缺失值的行。再次运行 info,确认列的数据类型,并列出站点等分类字段的不重复值。如果某一步删除的行数超出预期,先检查这些行,再继续操作。
AI 助手如何帮助你用 pandas 清洗数据?
如果你描述每一列的内容、存在的问题以及希望采用的规则,AI 助手就可以起草数据清洗步骤,也可以解释你不熟悉的函数。描述数据结构时,要使用虚构的示例值,不要粘贴姓名、地址或完整邮政编码等真实客户数据。要求它报告每一步完成后的行数,并根据 pandas 官方文档核查它使用的每个函数参数,因为助手有时会建议使用并不存在或已随版本发生变化的选项。
用 pandas 清洗数据时,有哪些常见错误?
最常见的错误是不带任何参数调用 dropna,导致一些仅在可选列中缺少数据、其他方面没有问题的行也被删除。其他错误包括:在统一文本格式之前去重;转换日期时不检查日和月的顺序;覆盖原文件;以及从不将清洗后的汇总数值与可信数值核对。
这节课在 Tosheo.ai 中属于哪一部分?
这是数据科学课程中数据科学与分析分类下的一节编程课。Tosheo.ai 的每个学科都从概念和无代码练习开始,编程课则是可选的进阶学习路径:注册后,本课的完整实操版本会让你使用 Python 和 pandas 编写并运行每个数据清洗步骤,并依据评分标准评阅。如果你刚接触 Python,请先学习 Python 课程。它培养的是实用技能,不是集训营,也不保证就业。
来源与范围
pandas 文档:read_csv(核查日期:19 October 2026) ↗
pandas 用户指南:处理缺失数据(核查日期:19 October 2026) ↗
pandas 文档:DataFrame.dropna(核查日期:19 October 2026) ↗
pandas 文档:DataFrame.drop_duplicates(核查日期:19 October 2026) ↗
pandas 文档:DataFrame.astype(核查日期:19 October 2026) ↗
pandas 文档:to_numeric(核查日期:19 October 2026) ↗