Python中pandas.to_datetime转换dd-mm-yy格式日期异常怎么解决?
解决pandas日期格式转换问题
完整实现代码
import pandas as pd d = pd.DataFrame({"dat":["01-06-68", "01-06-57","14-02-80","01-01-04","07-11-20"], "j":[34,2,1,7,8]}) # 方法1:兼容所有pandas版本 # 先指定输入格式为dd-mm-yy,解决日月顺序识别错误问题 d['dat'] = pd.to_datetime(d['dat'], format='%d-%m-%y') # 自定义年份阈值调整,这里设置年份>=2050的都归到上世纪,可根据实际需求修改阈值 d.loc[d['dat'].dt.year >= 2050, 'dat'] = d['dat'] - pd.DateOffset(years=100) # 方法2:pandas版本>=2.2可直接用内置参数一步实现 # d['dat'] = pd.to_datetime(d['dat'], format='%d-%m-%y', year_cutoff=50)
输出验证
执行上述代码后输出d['dat']即可得到期望结果:
0 1968-06-01 1 1957-06-01 2 1980-02-14 3 2004-01-01 4 2020-11-07 Name: dat, dtype: datetime64[ns]
说明
pd.to_datetime的format参数明确指定输入日期的结构为%d-%m-%y(日-月-两位数年份),避免自动推断出现日月顺序颠倒的问题year_cutoff参数的逻辑为:两位数年份小于参数值的归为21世纪,大于等于参数值的归为20世纪,可根据业务场景自行调整阈值大小- 低版本pandas没有内置
year_cutoff参数,用手动偏移100年的方式即可实现相同效果
内容的提问来源于stack exchange,提问作者Amit
相关产品推荐
相关产品推荐

