Pandas使用pd.to_datetime转换日期时出现日月位置颠倒问题求解
问题原因
直接调用pd.to_datetime()时,Pandas默认优先按月-日-年的逻辑解析日期字符串:
- 当日部分数值≤12时,会被误识别为月份,出现月日颠倒的问题
- 当日部分数值>12时,因为不可能作为合法月份,Pandas才会自动切换为日-月-年的逻辑解析,结果正确
正确解决方法
方法1:显式指定日期格式(最推荐)
直接指定和你数据匹配的日期格式字符串,完全避免解析歧义,同时解析性能更高:
# %d=两位日,%m=两位月,%y=两位年份 df_non_holidays["date"] = pd.to_datetime(df_non_holidays["date"], format="%d-%m-%y")
方法2:开启dayfirst参数
如果不想手动写格式匹配规则,可以直接传入dayfirst=True告知Pandas日期的第一位为日:
df_non_holidays["date"] = pd.to_datetime(df_non_holidays["date"], dayfirst=True)
拓展:读取CSV时直接完成转换
你也可以在调用pd.read_csv()时就配置日期解析参数,一步完成读取和类型转换:
df_non_holidays = pd.read_csv( "holidays.csv", parse_dates=["date"], # 指定要解析为日期的列 dayfirst=True # 告知解析时第一位为日 )
内容的提问来源于stack exchange,提问作者KPMR
相关产品推荐
相关产品推荐

