Pandas转换日期格式时自动转为Timestamp的问题求助
问题分析与解决方法
问题根源
你遇到的情况是因为pandas的自动类型推断:
- 当你赋值不带
Z的格式化字符串时,pandas会把它识别为合法的本地时间格式,自动转成Timestamp对象,显示时用pandas默认的YYYY-MM-DD HH:MM:SS格式,所以看不到你想要的T分隔符。 - 加
Z后缀后,这个格式属于UTC时间的字符串表示,pandas无法直接解析为本地Timestamp,所以会保留字符串类型,因此显示符合你的预期格式。
正确解决方案
方法1:直接生成目标格式的字符串(推荐,效率更高)
不用循环,用pandas的矢量化操作dt.strftime直接批量转换,生成的结果是字符串类型,不会被自动转成Timestamp:
df['TRAN_DATE'] = df['TRAN_DATE'].dt.strftime("%Y-%m-%dT17:00:00")
执行后列的类型会变成object(字符串),显示格式就是你要的YYYY-MM-DDTHH:MM:SS。
方法2:仅修改显示格式(保留Timestamp类型)
如果不需要改变数据类型,只是想让显示时带T,可以设置pandas的全局日期显示选项:
pd.options.display.date_format = "%Y-%m-%dT%H:%M:%S"
注意:这种方法只是改变显示效果,实际存储的还是Timestamp对象,导出或使用时如果需要字符串格式,还是建议用方法1。
额外提示
你原来用循环遍历修改的方法效率很低,尤其是数据量大的时候,pandas的矢量化操作(比如dt.strftime)会比循环快很多,尽量避免用for循环处理DataFrame。
内容的提问来源于stack exchange,提问作者mhooper
相关产品推荐
相关产品推荐

