Pandas Series日期转换出现日与月颠倒错误,求解决方案
解决Pandas Series日期解析中日月颠倒的问题
问题重现
输入的日期序列为DD/MM/YYYY格式:
import pandas as pd x = pd.Series(["12/01/2017", "09/03/2018", "23/11/2019"])
期望解析为YYYY-MM-DD格式的datetime类型,但执行原代码后出现日月颠倒错误,仅日数超过12的条目解析正确。
错误原因
原代码未明确指定输入日期的格式,pd.to_datetime自动推断时会优先采用美式MM/DD/YYYY格式解析:
- 对于
12/01/2017,12被识别为合法月份,01被当作日期,导致解析结果颠倒 - 对于
23/11/2019,因23不属于合法月份范围(1-12),才会自动切换为DD/MM/YYYY格式解析
yearfirst=False仅控制年份是否在开头,无法明确日和月的顺序,因此无法解决该问题。
解决方法
直接在pd.to_datetime中指定输入日期格式为%d/%m/%Y,强制按DD/MM/YYYY规则解析,无需额外的strftime和类型转换:
pd.to_datetime(x, format='%d/%m/%Y')
运行结果:
0 2017-01-12 1 2018-03-09 2 2019-11-23 dtype: datetime64[ns]
若需兼容格式错误的条目,可保留errors='coerce'参数,将无法解析的日期转为NaT:
pd.to_datetime(x, format='%d/%m/%Y', errors='coerce')
补充说明
- 当日期格式明确时,务必指定
format参数,既可以避免解析错误,还能提升代码运行效率(自动推断格式的速度远慢于指定格式) - 若存在多种混合格式的日期,可尝试
dayfirst=True参数(优先级低于format),但仍建议明确指定格式以保证解析准确性
内容的提问来源于stack exchange,提问作者Carlos Carvalho
相关产品推荐
相关产品推荐

