Pandas保存DataFrame至CSV时日期列格式未生效问题排查与解决
问题原因与解决方法
我之前也踩过这个坑,原因其实很明确:pandas的date_format参数只对pandas原生的datetime64[ns]类型列生效,而你的Date_Col是由Python原生datetime.date对象组成的列,所以调用to_csv时,这个参数被直接忽略了,pandas自动用了默认的%Y-%m-%d格式来序列化这些原生date对象。
至于你单独用strftime能得到正确格式,那是因为你直接调用了原生date对象的方法,和pandasto_csv的序列化逻辑完全是两回事。
正确解决方法(无需转字符串)
只需要把Date_Col转换成pandas的datetime64[ns]类型即可,转换后依然是日期类型,完全不影响后续脚本对DataFrame的使用:
import pandas as pd from datetime import date DATE_FORMAT = '%Y.%m.%d' df = pd.DataFrame({'Col': [1.5, 2.3, 3.5], 'Date_Col': [date(2019, 1, 1), date(2019, 2, 1), date(2019, 3, 1)]}) # 关键步骤:将原生date列转为pandas datetime类型 df['Date_Col'] = pd.to_datetime(df['Date_Col']) df.to_csv('df.csv', index=False, decimal=',', sep=';', date_format=DATE_FORMAT)
运行这段代码后,生成的CSV文件里的日期列就会是2019.01.01、2019.02.01这种你期望的格式了。同时df['Date_Col']依然是日期类型,后续的数据分析、日期运算等操作都能正常进行,完全不用改成字符串。
内容的提问来源于stack exchange,提问作者mortysporty
相关产品推荐
相关产品推荐

