应使用 chunksize 流式读取大 csv,避免内存溢出;关闭默认空值识别(keep_default_na=false),显式指定 na_values;数值列含异常字符时先读为字符串再转 numeric;空值处理需结合业务含义,避免盲目填充;需监控空值模式突变。

直接读大CSV别用 pandas.read_csv() 默认参数,否则内存爆掉或空值被静默转成 NaN 导致后续计算出错。
用 chunksize 流式读取,避免内存溢出
单个 CSV 超过 500MB 就不该全量加载。用 chunksize 参数把文件切成块处理,每块独立清洗,不累积内存:
-
chunksize=10000是较稳妥的起点,可根据机器内存调到 5k–50k - 必须配合
for循环迭代,不能直接对pd.read_csv(..., chunksize=...)调用.head()或.shape—— 它返回的是TextFileReader对象,不是 DataFrame - 如果要做全局统计(如总行数、某列最大值),得在循环里累加或用
numpy原生类型暂存,别堆 DataFrame
空值识别不能只信 na_values,要结合 keep_default_na
默认情况下 pandas 把 ''、'NULL'、'N/A' 都当空值,但你数据里可能有业务上合法的字符串 'NULL'(比如日志字段值就是字面量 'NULL'),这时会误判:
仅使用 Python 将 Claw Code 虚拟化框架与 OpenClaw 集成,提供 184 种工具和 200 多条命令,用于安全分析和代码质量...
- 先设
keep_default_na=False关掉默认映射 - 再显式传
na_values=['', 'N/A', 'null'],只认你确认的空标记 - 若某列是数值型但含异常字符(如
'--'、'#REF!'),需额外用dtype={col: str}先读成字符串,再用pd.to_numeric(..., errors='coerce')转换,这样错误值才变成NaN而非报错
处理空值前先搞清“空”对业务意味着什么
填 0、填均值、前向填充,还是直接丢弃?选错策略比技术实现影响更大:
- 时间序列类字段(如
order_time)出现空值,大概率是采集失败,不宜用均值填充,应标记为is_missing_order_time=True单独分析 - 分类字段(如
user_region)空值占比若超 30%,说明上游数据质量差,补值意义不大,更适合做缺失率监控告警 - 用
df.fillna()前务必检查df[col].isna().sum()和df[col].value_counts(dropna=False).head(10),确认空值分布是否均匀,避免在长尾分布上盲目填充
真正麻烦的不是读取或填空,而是同一份 CSV 在不同批次中空值模式突变——比如某天突然开始写入 '\N' 替代空字符串。上线后得靠 pd.read_csv(..., na_values=...) 的灵活性兜底,而不是依赖一次写死的清洗逻辑。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










