为何Pandas pd.to_datetime转换同格式日期会出现异常结果?
Pandas日期解析错误:为什么
01-12-19被转成了2019年1月12日? 这个问题本质是日期格式歧义导致的Pandas默认推断失误,咱们来理清楚:
问题根源
你的日期字符串是日-月-年 时:分的格式,但pd.to_datetime()在没有明确指定格式时,会根据字符串内容自动推断:
- 对于
24-05-19,因为24不可能是月份(月份范围是1-12),Pandas能立刻判断这是日-月-年,所以转换正确; - 但
01-12-19里的01和12都符合月份的取值范围,这时候Pandas会默认采用美式的月-日-年格式解析,于是就把01当成月份、12当成日期,得到了错误的2019-01-12。
解决方法:明确指定日期格式
要彻底避免这种歧义,直接给pd.to_datetime()传入format参数,告诉它你的日期字符串结构是%d-%m-%y %H:%M:
import pandas as pd # 原始日期字符串 date1 = '01-12-19 01:04' date2 = '24-05-19 15:02' # 指定格式转换 fixed_date1 = pd.to_datetime(date1, format='%d-%m-%y %H:%M') fixed_date2 = pd.to_datetime(date2, format='%d-%m-%y %H:%M') print(fixed_date1) # 输出:Timestamp('2019-12-01 01:04:00') print(fixed_date2) # 输出:Timestamp('2019-05-24 15:02:00')
格式代码说明
这里用到的格式代码对应含义:
%d:两位数的日期(01-31)%m:两位数的月份(01-12)%y:两位数的年份(19自动映射为2019)%H:24小时制的小时数(00-23)%M:两位数的分钟数(00-59)
这样指定格式后,Pandas就会严格按照你定义的规则解析日期,再也不会出现推断错误啦!
内容的提问来源于stack exchange,提问作者user88484
相关产品推荐
相关产品推荐

