Pandas保存DataFrame为CSV时列名"9-7"被转日期格式问题求助
解决Pandas保存CSV时列名"9-7"被识别为日期的问题
这个问题我之前踩过坑!其实根本不是Pandas的to_csv把列名转成了日期格式——你可以用记事本打开生成的df.csv看看,列名其实还是原原本本的"9-7"。真正的“凶手”是Excel的自动识别机制:它会把带-的数字组合默认判定为日期,所以打开时才会显示成7-Sep。
下面给你几个实用的解决办法,按需选择:
方法1:给列名添加文本标识(最简单直接)
给列名加个单引号或者非数字前缀,让Excel无法把它识别成日期。比如:
# 给列名加上单引号作为前缀 df.rename(columns={"9-7": "'9-7'"}, inplace=True) df.to_csv('df.csv', index=False)
这样Excel打开后列名会显示为'9-7',如果觉得单引号影响美观,也可以换成下划线或者其他符号,比如"col_9-7",后续需要还原列名也很容易。
方法2:用quoting参数强制包裹列名
借助Pandas的quoting参数,让非数字列名被双引号包裹,Excel会把带双引号的内容当成纯文本处理:
import csv # 用csv.QUOTE_NONNUMERIC参数包裹非数字列名 df.to_csv('df.csv', index=False, quoting=csv.QUOTE_NONNUMERIC)
这个方法的好处是不需要修改原始DataFrame的列名,保存后的CSV里"9-7"会被双引号括起来,Excel打开时就不会乱转格式了。
方法3:手动修改Excel的导入设置(不用改代码)
如果不想动代码,也可以通过Excel的手动导入流程来避免自动识别:
- 打开Excel,点击「数据」选项卡 → 选择「自文本/CSV」
- 选中你的
df.csv文件,在导入预览窗口中找到"9-7"对应的列 - 把该列的「数据类型」改成「文本」,再完成导入
这样列名就会完全保留原样了。
内容的提问来源于stack exchange,提问作者mar
相关产品推荐
相关产品推荐

