You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 05:15:00