pandas 读取 CSV 编码问题
pandas 读取 CSV 编码问题
CSV 看起来是最简单的数据格式,但实际项目里经常因为编码、分隔符或表头问题让第一步就卡住。特别是中文表格,从 Excel、网页、系统后台导出后,编码并不总是 UTF-8。
排查读取问题时,不要一上来就改业务逻辑。先把文件读对,再谈清洗和分析。
先判断编码
如果中文变成乱码,优先尝试 utf-8-sig 和 gbk。utf-8-sig 常见于带 BOM 的 CSV,gbk 常见于 Windows 环境导出的中文文件。
import pandas as pd
for enc in ["utf-8", "utf-8-sig", "gbk", "gb18030"]: try: df = pd.read_csv("data.csv", encoding=enc, nrows=5) print(enc, df.head()) break except UnicodeDecodeError as e: print(enc, "failed", e)再检查分隔符
有些文件扩展名叫 .csv,实际却用制表符、分号或多个空格分隔。读取后如果只有一列,或者列名挤在一起,就要检查 sep。
df = pd.read_csv("data.csv", encoding="gbk", sep=None, engine="python")print(df.shape)print(df.columns.tolist())最后看空值和表头
后台导出的表格常会在前几行放说明文字,真正表头不在第一行。这时可以用 skiprows 或 header 指定读取位置。
读完后立刻打印 shape、columns、head,不要等分析结果异常时再回头查输入。
复查点
-
行数是否和原文件大致一致。
-
中文列名是否正常显示。
-
是否出现
Unnamed: 0这类多余索引列。 -
数值列有没有被整体读成字符串。
实战复盘
复用《pandas 读取 CSV 编码问题》时,不要只复制代码块。先把自己的字段名、数据口径和异常规则写出来,再替换示例里的列名。pandas 的函数很通用,但业务字段的含义不能自动迁移。
每次处理完成后,我会抽样看几条原始记录和处理后记录。尤其是日期、金额、分类字段,机器统计和肉眼抽查要一起做,才能发现格式看似正常但含义错位的问题。
这类文章后续可以继续补充真实小表格作为输入示例。输入、处理、输出三者都出现,教程才不会变成只解释 API。
最小验收样例
验收《pandas 读取 CSV 编码问题》时,我会手写一个三到五行的小 DataFrame:一行正常数据,一行缺失或异常数据,一行边界数据。先让示例在小表上跑通,再换成完整数据集。
小表的好处是结果可以人工计算。只要人工结果和 pandas 输出对不上,就说明代码逻辑或字段口径还没想清楚。这个过程比直接在大表上调试更可靠。
小结
CSV 读取问题要按编码、分隔符、表头、空值的顺序排查。第一步读错,后面所有统计都会跟着错。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!













