Python中Pandas如何导出为CSV文件_使用to_csv并设置编码格式

Python中Pandas如何导出为CSV文件_使用to_csv并设置编码格式

Python

to_csv保存中文乱码的根本原因是编码不匹配:Windows默认GBK而Pandas默认UTF-8;Excel读CSV不自动识别UTF-8,需用encoding='utf-8-sig'写入BOM;index=True会多导出行号,应按需设index=False;na_rep可直接替换NaN而不改原数据;大文件须用chunksize分块写入防内存溢出。

to_csv 保存中文乱码,根本原因是编码没对上

Windows 默认用 gbk,而 Pandas 默认用 utf-8;导出 CSV 后用 Excel 打开乱码,大概率不是数据问题,是编码声明和实际写入不一致。Excel(尤其是旧版)读 CSV 时不会自动识别 BOM 或 UTF-8,它默认按系统编码解析。

  • 最稳妥的解法:加 encoding='utf-8-sig' —— 它会在文件开头写入 BOM,Excel 能正确识别为 UTF-8
  • 别用 encoding='utf-8' 直接保存,Excel 打开基本会乱码
  • 如果必须用 gbk(比如对接老系统),就统一用 encoding='gbk',但注意:含 emoji、生僻字或某些 Unicode 字符会报错 UnicodeEncodeError

to_csv 的 index 参数不关掉,第一列会多出一列行号

默认 index=True,导出的 CSV 第一列是自增数字索引(0, 1, 2…),看着像“多了一列”。这不是 bug,是 Pandas 把 DataFrame 的行索引当数据写了进去。

  • 导出纯数据表(比如给业务方看、导入数据库),务必加 index=False
  • 如果原始索引有意义(比如是日期、ID),可以保留 index=True,但要确认下游能正确解析索引列
  • 用 Excel 打开时,index=True 导致列名整体右移一格,容易误判字段顺序

处理缺失值时 na_rep 参数比 fillna 更直接

CSV 是文本格式,NaN 默认导出成空字符串,但有时需要明确标成 NULLN/A\N(比如对接 Hive/PostgreSQL)。与其先用 fillna() 改原数据,不如在 to_csv 里一步指定。

MedPeer

AI驱动的一站式科研服务平台

  • na_rep='NULL',所有 NaN 都变成字面量 NULL(不带引号)
  • 注意:na_rep 不影响 None 或空字符串,只管 Pandas 的 NaN
  • 如果字段本身有空字符串 '',它不会被替换成 na_rep 的值,这点和 fillna 行为不同

大文件导出卡住或内存爆掉?分块写入更稳

to_csv 默认一次性把整个 DataFrame 加载进内存再写磁盘,几百万行就可能吃光内存或写得极慢。尤其当目标路径是网络盘、NAS 或权限受限目录时,还容易因 I/O 暂停导致超时。

  • chunksize 参数分批导出:先 df.to_csv('out.csv', mode='w', header=True, index=False) 写头,再循环 df.iloc[i:i+chunksize].to_csv('out.csv', mode='a', header=False, index=False)
  • 避免用 to_csvcompression 参数直接写 .zip.gz —— 它内部仍会全量加载,压缩只是最后一步
  • 如果只是想减小体积,先用 to_csv(..., encoding='utf-8-sig') 保存为普通 CSV,再用系统命令压缩更可控

Pandas 的 to_csv 看似简单,但编码、索引、缺失值、分块这四个点,每个都卡过人。特别是 utf-8-sigindex=False,几乎成了导出前的肌肉记忆。

本文地址:https://www.sztg.com.cn/article/587771.html

如非特殊说明,本站内容均来自于网友自主分享,如有任何问题均请联系我们进行处理!

猜您喜欢