Python pandas导出CSV时日期格式转换结果异常问题排查
问题原因
你遇到的问题来自两个高频踩坑点:
- 你用
.dt.strftime('%Y-%m-%d')生成的YYYY-MM-DD是标准日期格式字符串,部分pandas版本在导出CSV时会自动把这类字符串隐式转回datetime类型,再用默认的斜杠分隔格式(M/D/YYYY,月日不补前导零)输出。而你用%Y%m%d生成的8位纯数字字符串不会被识别为日期,所以导出时会原样保留,结果正常。 - 还有一种极常见的情况:你是用Excel打开的导出文件。Excel会自动把CSV里符合日期规则的
YYYY-MM-DD格式,转换成本机系统默认的日期显示格式(中文Windows默认就是斜杠分隔的月/日/年),哪怕CSV文件本身存的是横杠格式,只是Excel显示时做了格式转换。
解决方法
选任意一种即可,第一种最稳妥:
方案1:导出时直接指定日期格式,跳过提前转字符串的步骤
不用写dt.strftime逻辑,date列保留datetime类型即可,在to_csv时显式指定日期格式参数,从根源避免隐式转换:
df['date'] = pd.to_datetime(df['date'], format='%m%d%Y') df.to_csv(output_file, index=False, date_format='%Y-%m-%d')
方案2:转字符串后强制固定类型
如果你确实需要提前把日期列转为字符串存储,可以在转完格式后显式声明列类型为字符串,阻断pandas的自动类型识别:
df['date'] = pd.to_datetime(df['date'],format='%m%d%Y') df['date'] = df['date'].dt.strftime('%Y-%m-%d').astype('string') df.to_csv(output_file,index=False)
验证提示
如果怀疑是Excel自动改了显示格式,不要用Excel打开CSV,改用记事本、VS Code这类纯文本编辑器打开,就能看到文件里存储的真实内容。
内容的提问来源于stack exchange,提问作者wellsinsideout
相关产品推荐
相关产品推荐

