错误原因是pandas 1.4+已移除to_excel()的encoding参数,因.xlsx为二进制格式不依赖文本编码;只需删除代码中df.to_excel(..., encoding='utf-8')的encoding参数即可修复。

升级 Python 3 后 pandas 出现编码报错,大概率不是 pandas 本身坏了,而是你用的旧写法在新版本里被移除了——最典型的就是给 to_excel() 传 encoding 参数。
to_excel() 不再支持 encoding 参数(Python 3.9+ + pandas ≥1.4)
这个错误信息:TypeError: NDFrame.to_excel() got an unexpected keyword argument 'encoding',说明你代码里写了类似 df.to_excel("out.xlsx", encoding="utf-8")。但 Excel 文件(.xlsx)根本不用 UTF-8 编码——它是二进制格式,encoding 参数从 pandas 1.4 开始就被彻底删掉了。
- Excel 输出由
openpyxl或xlsxwriter底层引擎处理,不走文本编码流程 -
encoding只对纯文本输出有效,比如to_csv()、to_json() - 如果你用的是老教程或复制的旧代码,大概率还留着这行“遗嘱”
read_csv() 报 UnicodeDecodeError 怎么定位真正编码
错误像这样:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa0 in position 19,说明文件不是 UTF-8,但你没指定编码。别瞎试 gbk 或 gb2312,先确认真实编码:
- 用 VS Code 或 Notepad++ 打开 CSV 文件,右下角会显示当前识别的编码(如 ANSI、UTF-8 with BOM、GBK)
- 命令行快速判断(Windows):
file -i your_file.csv(需安装 file 工具),或用 PowerShell:Get-Content your_file.csv -Encoding Byte | Select-Object -First 4看 BOM 头 - 常见组合:Windows 记事本另存为的 CSV 默认是
gbk;Excel 导出的 CSV 常带 BOM,用utf-8-sig - 改代码:
pd.read_csv("data.csv", encoding="utf-8-sig")或encoding="gbk"
为什么升级 Python 后突然出问题?
不是 Python 升级动了 pandas,而是你可能同时触发了两个隐性变化:
- Python 升级后,你顺手
pip install --upgrade pandas,结果从 1.3.x 升到了 2.0+,而 2.0+ 彻底移除了to_excel(encoding=...)和部分 I/O 的容错 fallback 逻辑 - 旧版 pandas 在遇到未知编码时会尝试自动 fallback(比如先试 utf-8,失败再试 gbk),新版默认关闭该行为,报错更严格
- 某些 IDE(如旧版 PyCharm)缓存了旧版 pandas stub,提示还在,但运行时报错,容易误判
最常被忽略的一点:to_excel() 报 encoding 错,99% 是代码里真写了那个参数;删掉它就行。别去查环境、重装库、换 Python 版本——那是把简单问题复杂化。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











