如何在使用 pandas 保存 Excel 文件时正确设置 UTF-8 编码
技术百科
花韻仙語
发布时间:2026-01-27
浏览: 次 pandas 的 `excelwriter` 在新版本中已移除直接传入 `options` 的方式,需通过 `engine_kwargs` 传递编码参数;本文详解如何为 xlsxwriter 引擎正确配置 utf-8 支持,避免 `typeerror` 并确保中文等 unicode 字符正常显示。
在使用 pandas 将 DataFrame 导出为 Excel 文件(.xlsx)时,很多用户会误以为可通过 options={'encoding': 'utf-8'} 直接设置编码——尤其在习惯处理 CSV 文件(需显式指定 encoding='utf-8')后容易产生这种误解。但需明确:标准 .xlsx 文件本身基于 Office Open XML 格式,原生支持 Unicode,无需也不接受 encoding 参数;而报错 TypeError: Workbook.__init__() got an unexpected keyword argument 'encoding' 正是因为 xlsxwriter 引擎根本不支持该选项。
那么,为什么有人会尝试设置 encoding='utf-8'?常见原因包括:
- 曾用 openpyxl 或旧版 xlsxwriter(v1.3.7 以前)的错误文档误导;
- 混淆了 .csv 导出(需 encoding)与 .xlsx 导出(无需);
- 实际需求其实是确保中文、emoji 等字符正确渲染——而这依赖于字体和引擎兼容性,而非“编码参数”。
✅ 正确做法(针对 xlsxwriter 引擎):
xlsxwriter 默认即以 UTF-8 内部处理所有字符串,你只需确保使用较新版本(≥1.3.7)并避免传入无效的 encoding 选项。若仍需显式控制(如设置默认字体以增强中文显示),可使用 options 中受支持的键,例如:
import pandas as pd
file_name = "bobs_burgers"
data_table = pd.DataFrame({
"角色": ["Bob", "Linda", "Tina"],
"台词": ["I love burgers!", "You're my little burger!", "Boop boop be doop!"]
})
# ✅ 推荐写法:不传 encoding,仅在必要时配置字体等有效选项
with pd.ExcelWriter(
fr".\Exported_data\{file_name}.xlsx",
engine="xlsxwriter",
engine_kwargs={
"options": {
"default_font": "Microsoft YaHei", # 中文友好字体(Windows)
# "strings_to_numbers": True, # 可选:自动转换数字字符串
}
}
) as writer:
data_table.to_excel(writer, sheet_name="characters", index=False)⚠️ 注意事项:
- engine_kwargs={'options': {...}} 是新版 pandas(≥2.0)中传递底层引擎参数的唯一合法方式,直接传 options= 会报错;
- xlsxwriter 的 options 中没有 encoding 键,传入将触发 TypeError;官方
文档明确列出的有效选项见 xlsxwriter Options;
- 若需导出含 BOM 的 UTF-8 CSV,请改用 df.to_csv(..., encoding='utf-8-sig');
- 如遇中文显示为方框(□),请检查 Excel 中是否安装了对应字体,并在 options 中指定(如 "default_font": "SimSun" 或 "Noto Sans CJK SC")。
? 总结:对于 .xlsx 导出,无需、也不能设置 encoding='utf-8';xlsxwriter 和 openpyxl 均原生支持 Unicode。专注升级库版本、合理配置字体与格式,即可稳定导出多语言数据。
# 可选
# 也不
# excel
# windows
# 人会
# 多语言
# 并在
# 只需
# 文档
# 新版本
# 不支持
# win
# microsoft
# word
# go
# 编码
# xml
# 字符串
# 报错
# 为什么
# bom
# office
# csv
# pandas
# 而这
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- 短链接怎么用php还原_从基础原理到代码实现教学【
- Windows10如何更改鼠标图标_Win10鼠标
- Python配置文件操作教程_JSONINIYAM
- Windows10电脑怎么设置虚拟内存_Win10
- Mac怎么进行语音输入_Mac听写功能设置与使用【
- php485支持哪些操作系统_php485跨系统支
- Python函数参数高级用法_默认值与可变参数解析
- c# Task.Yield 的作用是什么 它和Ta
- Windows10如何重置此电脑_Windows1
- windows如何备份注册表_windows导出和
- Win11怎么设置DNS服务器_Windows11
- 如何在Golang中操作嵌套切片指针_Golang
- Win11如何暂停系统更新 Win11暂停更新最长
- Django 密码修改后会话失效的解决方案
- Win11怎么设置夜间模式_Windows11显示
- Win11怎么设置虚拟桌面 Win11新建多桌面切
- Python如何创建带属性的XML节点
- c++输入输出流 c++ cin与cout格式化输
- Windows如何查看和管理已安装的字体?(字体文
- Mac如何开启夜览模式_Mac护眼模式设置与定时
- c++如何实现一个高性能的环形队列(Ring Bu
- c++怎么用jemalloc c++替换默认内存分
- 如何使用Golang recover捕获panic
- 如何在Golang中实现服务熔断与限流_Golan
- Win11怎样安装钉钉客户端_Win11安装钉钉教
- php和redis连接超时怎么办_phpredis
- 如何更改Windows资源管理器的默认启动位置?(
- Mac如何备份到iCloud_Mac桌面与文稿文件
- mac怎么分屏_MAC双屏显示与分屏操作技巧【指南
- Windows笔记本无法进入睡眠模式怎么办?(电源
- Win10怎么更改用户名 Win10修改账户名称操
- Python技术债务管理_长期维护解析【教程】
- Win11如何设置文件关联 Win11修改特定文件
- Win10电脑C盘红了怎么清理_Windows10
- Win11笔记本怎么看电池健康度_Win11电池报
- Win11如何设置自动关机 Win11定时关机命令
- Python函数接口稳定性_版本演进解析【指导】
- Python列表推导式与字典推导式教程_简化代码高
- 如何使用Golang实现聊天室消息存档_存储聊天记
- Windows的便笺功能如何使用?(桌面备忘技巧)
- php订单日志怎么导出excel_php导出订单日
- php8.4新语法match怎么用_php8.4m
- Win11如何更改任务栏颜色 Win11自定义任务
- Go语言中正确反序列化多个同级XML元素为结构体切
- php串口通信波特率怎么选_根据硬件手册设置正确波
- 如何在Golang中修改数组元素_通过指针实现原地
- Win10怎样安装PPT模板_Win10安装PPT
- PHP 中如何在函数内持久修改引用变量所指向的目标
- C++ static_cast和dynamic_c
- Win11怎么关闭触摸键盘图标_Windows11


QQ客服