将DataFrame的datetime列转为string后时分秒丢失,如何保留指定格式?
问题描述
我加载了一个包含时间序列和数值的DataFrame,数据如下:
datetime value_a 0 2019-08-19 00:00:00 194.32000000 1 2019-08-20 00:00:00 202.24000000 2 2019-08-21 00:00:00 196.55000000 3 2019-08-22 00:00:00 187.45000000 4 2019-08-23 00:00:00 190.36000000
执行代码df['datetime'] = df['datetime'].astype(str)将第一列转为string类型后,时分秒消失,结果如下:
datetime value_a 0 2019-08-19 194.32000000 1 2019-08-20 202.24000000 2 2019-08-21 196.55000000 3 2019-08-22 187.45000000 4 2019-08-23 190.36000000
我需要保留%Y-%m-%d %H:%M:%S格式供后续使用,请问问题出在哪里?
注:最初以为是object转datetime时的问题,但后来发现是转string时丢失了时分秒。
原因分析
当datetime列是pandas的datetime64类型时,直接用astype(str)转换字符串,pandas会做自动格式简化:如果时间的时分秒部分全为0,就默认只输出日期部分,不会保留时分秒的0值。
解决方法
不要用astype(str),改用dt.strftime()方法指定固定格式化字符串,强制保留时分秒:
df['datetime'] = df['datetime'].dt.strftime('%Y-%m-%d %H:%M:%S')
执行后,datetime列会严格按照YYYY-MM-DD HH:MM:SS格式输出,即使时分秒都是0也会完整保留。
内容的提问来源于stack exchange,提问作者FN_
相关产品推荐
相关产品推荐

