为什么使用Pandas转换为Datetime时会出现日期格式错位问题?
问题原因
pandas的pd.to_datetime()函数默认采用美式日期解析逻辑(优先将第一个数值识别为月份),当字符串中第一个数值≤12时,会默认判定为月份,只有当第一个数值>12(无法作为合法月份取值)时,才会自动识别为日期:
- 第一条记录
22-04-15、第三条记录18-04-15的首段数值22、18均大于12,无法被解析为月份,因此自动识别为日期,结果正确 - 第二条记录
04-08-15、第四条记录05-07-15的首段数值04、05均≤12,被默认解析为月份,因此出现月日错位的问题
解决方案
有两种常用解决方式,第二种精准指定格式的方案更稳定,适合已知日期格式的场景:
- 开启
dayfirst参数,明确告知pandas日期段在前:
df['Date'] = pd.to_datetime(df['Date'], dayfirst=True)
- 直接指定日期匹配格式,完全避免解析歧义,同时解析效率更高:
df['Date'] = pd.to_datetime(df['Date'], format='%d-%m-%y')
内容的提问来源于stack exchange,提问作者Siddharth Soni
相关产品推荐
相关产品推荐

