跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

Python 数据清洗的常见 pipeline 模板

pandas读取时应同步处理缺失值和数据类型:用na_values识别自定义空值,dtype显式指定类型,parse_dates处理混合日期格式,low_memory=False避免类型推断错误。 用
pandas.read_csv()
读取时就该处理缺失和类型 很多人把清洗拆成“先读再洗”,结果中间生成一堆
NaN
object
类型列,后续
fillna()
astype()
处理起来反而出错。读取阶段就能压掉 60% 的脏数据问题。 实操建议: 立即学习 “ Python免费学习笔记(深入) ”; 用
na_values
补充识别自定义空值,比如
['N/A', 'NULL', '']
; 用
dtype
显式指定列类型,避免
int64
列混入字符串后自动变成
object
; 对含日期的列,直接用
parse_dates
+
date_parser
(如需处理
'2023/01/01'
'01-Jan-2023'
混用); 加
low_memory=False
防止分块推断类型失败导致警告或隐式转换。 去重不是只调
drop_duplicates()
表面重复不等于逻辑重复。比如用户表里
email
列大小写不一致、前后空格未清理,
drop_duplicates(subset=['email'])
就会漏掉;又或者订单表里
order_id
相同但
amount
差 0.01 元,是录入误差还是真实退款?不能无脑删。 实操建议: 立即学习 “ Python免费学习笔记(深入) ”; 去重前先做标准化:用
str.strip().str.lower()
清理文本键; 对数值型关键字段(如金额),考虑用
round()
统一精度再比对; 用
keep='first'
keep=False
明确策略,别依赖默认值; 保留原始索引或加标记列(如
is_duplicated = df.duplicated(keep=False)
),方便回溯。
apply()
写得越“像 Python”越容易慢 写个
lambda x: clean_phone(x) if pd.notna(x) else None
看着清楚,但每行都进 Python 解释器,10 万行可能卡 3 秒;而向量化操作(如
str.replace()
str.extract()
)底层走的是 C,快一个数量级。 Python 3.14.3 微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。 下载 实操建议: 立即学习 “ Python免费学习笔记(深入) ”; 优先用
Series.str
方法链代替
apply()
处理字符串; 数值计算尽量用
np.where()
clip()
、布尔索引,而不是
apply(lambda x: ...)
; 真要写
apply()
,确保函数本身已做空值防御(否则遇到
NaN
TypeError
),且返回类型稳定; 调试时加
df.sample(5).apply(...)
快速验证逻辑,别一跑全量才报错。 保存前必须检查
to_csv()
的编码和空值表示 用
df.to_csv('out.csv')
默认用
utf-8
,但下游 Excel 打开中文是乱码——因为 Windows 默认认
gbk
;更麻烦的是,
NaN
默认写成空字段,Excel 会当成空字符串,再读回来就再也分不清是原始缺失还是人为清空。 实操建议: 立即学习 “ Python免费学习笔记(深入) ”; 导出给 Excel 用,加
encoding='gbk'
encoding='utf-8-sig'
(后者带 BOM,Excel 能认); 用
na_rep='NULL'
显式标出缺失,避免和空字符串混淆; 禁用索引导出:
index=False
,否则多一列没意义的数字; 如果字段含换行符或逗号,确认
quoting=csv.QUOTE_ALL
(需先
import csv
)。 清洗 pipeline 最容易被忽略的,是“中间态不可逆”——比如
fillna(0)
覆盖了原始缺失语义,后面再想还原就只能靠日志或备份。留一列
raw_x
或用
pd.concat([df, df_cleaned], axis=1)
对齐对比,比事后 debug 强十倍。

相关文章