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,快一个数量级。
【极品模板】出品的一款功能强大、安全性高、调用简单、扩展灵活的响应式多语言企业网站管理系统。 产品主要功能如下: 01、支持多语言扩展(独立内容表,可一键复制中文版数据) 02、支持一键修改后台路径; 03、杜绝常见弱口令,内置多种参数过滤、有效防范常见XSS; 04、支持文件分片上传功能,实现大文件轻松上传; 05、支持一键获取微信公众号文章(保存文章的图片到本地服务器); 06、支持一键
实操建议:
立即学习“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 强十倍。









