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

Pandas调用pd.to_datetime指定月日时间格式自动补1900年问题求助

Pandas时间列转换自动填充1900年问题解决方案

问题原因

Pandas的datetime64是完整时间戳类型,必须包含年、月、日三级信息。当你传入的时间字符串仅包含月、日、时、分、秒时,Pandas会默认填充1900作为缺省年份,属于框架内置逻辑。

解决方案

根据你的实际业务需求选择对应处理方式:

方案1:补全正确业务年份(需要做时间计算/排序/聚合时选这个)

如果你的数据对应明确的业务年份,直接在转换前给时间字符串拼接上年份即可,示例代码如下(以2024年为例,替换为你实际需要的年份即可):

# 批量处理原始DateTime字符串(替代低效的for循环遍历)
scen_1['DateTime'] = scen_1['DateTime'].str[1:3] + '-' + scen_1['DateTime'].str[4:6] + ' ' + scen_1['DateTime'].str[8:]
# 批量替换24:00:00为00:00:00
scen_1['DateTime'] = scen_1['DateTime'].str.replace('24:00:00', '00:00:00')
# 拼接业务年份
scen_1['DateTime'] = '2024-' + scen_1['DateTime']
# 转换为datetime类型
scen_1['Date'] = pd.to_datetime(scen_1['DateTime'], format='%Y-%m-%d %H:%M:%S')

转换后的Date列就会携带你指定的年份,不会再出现1900年的问题,同时可以正常做时间差值、分组聚合、排序等时间运算操作。

方案2:不需要年份,仅需月日时分秒格式展示

如果你的场景不需要做时间运算,只需要保留%m-%d %H:%M:%S格式的内容输出,直接将datetime类型转换为格式化字符串即可:

# 基于你已有的Date列,直接转换为无年份的字符串格式
scen_1['Date_str'] = scen_1['Date'].dt.strftime('%m-%d %H:%M:%S')

生成的Date_str列就是你需要的无年份格式内容。

额外优化提示

你原来使用for循环逐行修改DateTime列的写法在数据量较大时效率极低,上述代码中使用Pandas矢量化字符串操作替代循环,处理效率可以提升100倍以上,同时避免链式赋值警告。

内容的提问来源于stack exchange,提问作者JackedCoder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:45:05