指定encoding='gbk'可解决绝大多数CSV中文乱码问题,因Windows下Excel导出的CSV多为GBK编码,而pandas默认用utf-8读取导致不匹配;若报gbk解码错误,可加errors='replace'绕过,保存时推荐用utf-8-sig避免下游乱码。

用 pd.read_csv() 指定 encoding='gbk' 就能解决
绝大多数乱码问题,根源就是没告诉 Pandas 文件的实际编码。CSV 是纯文本,Python 默认按 UTF-8 解析,而 Windows 下用 Excel 保存的中文 CSV 往往是 GBK 编码,两者不匹配就直接显示成 或一堆问号。
最直接的解法就是在 pd.read_csv() 里显式传入 encoding='gbk':
import pandas as pd
df = pd.read_csv('data.csv', encoding='gbk')
注意:不是 gb2312,也不是 gb18030 —— 虽然三者兼容性有重叠,但日常 Excel 生成的 CSV 绝大多数是标准 GBK;用错编码反而可能报 UnicodeDecodeError。
遇到 UnicodeDecodeError: 'gbk' codec can't decode byte 怎么办
这个错误说明文件里混了 GBK 无法解析的字节,常见于:Excel 保存时插入了 emoji、从网页复制粘贴了特殊符号、或部分字段用了 UTF-8 BOM 头。
立即学习“Python免费学习笔记(深入)”;
临时绕过错误的稳妥做法是加 errors='ignore' 或 errors='replace':
图片提示词生成器?不止如此。 马甲系统 —— 把脑海中的画面,翻译成AI能理解的专业表达。 用得越多,它越懂你:首次需要多问几句确认方向,用久了几乎一说就懂。 用得越多,它越快:缓存机制让后续对话越来越省。 RAG进化:成功案例持续入库,越跑越聪明。 输入「新手指南」查看完整功能介绍
df = pd.read_csv('data.csv', encoding='gbk', errors='replace')
-
errors='ignore':跳过非法字节,可能导致字段内容截断 -
errors='replace':把非法字节替换成 ,更易发现异常位置 - 不推荐用
encoding='utf-8-sig'强行读 —— 会把本该是中文的地方全读成乱码
列名含中文但读出来是乱码?检查 encoding 是否只作用于内容没覆盖表头
这种情况极少,但真实存在:某些老旧工具导出的 CSV,表头(header)和数据体用了不同编码,或者 header 行前有隐藏的 BOM。
优先尝试加 encoding='utf-8-sig' 读一次看 header 是否正常 —— 如果 header 对了但数据乱,说明文件本身是 UTF-8 编码,只是被误标为 GBK;如果 header 和数据都乱,再切回 gbk 并配合 errors 参数。
更可靠的方式是先用文本编辑器(如 VS Code、Notepad++)打开 CSV,右下角查看真实编码,再照着填进 encoding 参数 —— 别猜,直接看。
用 to_csv() 保存时也得留意编码,否则下次读还是乱
很多人解决了读取,却在保存时埋下新坑:df.to_csv('out.csv') 默认用 UTF-8,没有 BOM,Windows 记事本打不开就会当 ANSI 处理,又变乱码。
如果下游必须用 Excel 打开且不改设置,保存时要显式指定:
df.to_csv('out.csv', encoding='utf-8-sig', index=False)
-
utf-8-sig会在文件开头写入 BOM,让 Excel 正确识别 UTF-8 - 别用
gbk保存 —— 现代系统和协作场景中,UTF-8 是更安全的长期选择 - 如果必须用 GBK 保存(例如对接老系统),就写
encoding='gbk',但记得通知协作者
编码问题从来不是 Pandas 的 bug,而是你和文件之间少了一句“说清楚用什么语言说话”。BOM、错误策略、保存习惯——这些细节比函数名更容易决定成败。

















