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
相关产品推荐
相关产品推荐

