解决pandas转换字符串日期时年份误判(2057替代1957)的问题
解决日期列年份解析错误的方案
问题根源
pd.to_datetime 默认以1969为分界处理两位数年份:两位数年份≥69时解析为19xx,<69时解析为20xx,因此"57"被识别为2057而非1957。
具体解决方法
指定固定日期格式(最推荐)
若Datum列的日期格式固定(如dd.mm.yy、mm/dd/yy),直接用format参数明确解析规则,配合cutoff_year调整年份映射:# 示例:日期格式为"日.月.两位数年份"(如"01.05.57") sf['Datum'] = pd.to_datetime(sf['Datum'], format='%d.%m.%y', cutoff_year=2000).dt.date # 若格式为"月/日/两位数年份",则改为format='%m/%d/%y'设置
cutoff_year=2000后,所有两位数年份都会被解析为19xx(因为两位数年份均大于00,触发前两位减1的规则)。调整年份分界规则
若无法确定固定格式,但明确所有两位数年份属于19xx,直接通过cutoff_year修改默认分界:sf['Datum'] = pd.to_datetime(sf['Datum'], cutoff_year=2000).dt.date若需要自定义分界(比如仅将≤57的两位数年份解析为19xx),可设置
cutoff_year=1957。手动修正已解析的错误年份
若已完成错误解析,可批量调整年份:# 先转换为datetime类型(保留时间信息以便修改) sf['Datum'] = pd.to_datetime(sf['Datum']) # 将年份超过当前年份的日期减去100年 sf.loc[sf['Datum'].dt.year > 2024, 'Datum'] = sf['Datum'] - pd.DateOffset(years=100) # 再转换为date类型 sf['Datum'] = sf['Datum'].dt.date
内容的提问来源于stack exchange,提问作者Kwame Holland
相关产品推荐
相关产品推荐

