pd.to_datetime搭配strftime后列类型仍为object,如何无需二次转成datetime64?
问题解答
现象原因
.dt.strftime() 方法的作用是将 datetime 类型的时间对象按照指定格式转换为字符串类型,因此第一行代码执行后,localtime 列会自动变为 pandas 中存储字符串默认使用的 object 类型,和你预期的 datetime64[ns] 类型不符。
这里需要明确一个常见误区:datetime64[ns] 类型本质存储的是高精度的时间戳数值,本身不存在「自定义存储格式」的属性,你看到的打印样式只是 pandas 默认的展示规则,和实际存储的内容无关。
无需二次转换的实现方案
你不需要先转字符串再转回来,直接保留 pd.to_datetime() 的解析结果即可,就能直接得到 datetime64[ns] 类型的列:
test['localtime'] = pd.to_datetime(test['localtime'], errors='coerce', dayfirst=True)
如果需要在打印、导出数据的时候展示为 %d/%m/%Y %H:%M 的格式,可以在需要输出的时候再调用 strftime 做转换,或者通过 pandas 样式配置全局/单列表格的展示格式,不会影响列本身的数据类型:
# 示例:仅修改列的展示格式,不改变存储类型 test.style.format({'localtime': lambda x: x.strftime('%d/%m/%Y %H:%M') if pd.notna(x) else ''})
内容的提问来源于stack exchange,提问作者Fazli
相关产品推荐
相关产品推荐

