Pandas多格式日期列转换时日月颠倒问题的解决方法
解决Pandas混合日期格式解析时的日月颠倒问题
问题根源
你之前的代码存在两个关键问题:
- 连续两次调用
pd.to_datetime,第二次的固定格式会直接覆盖第一次的转换结果,属于无效操作; - 使用
format='mixed'时未指定dayfirst=True,导致Pandas对斜杠分隔的日期(如01/12/2022)默认按美式日期习惯(月/日/年)解析,造成日月颠倒。
解决方案
你的四种日期格式(dd/mm/yyyy、dd-mm-yyyy、dd-MMM-yyyy、dd/MMM/yyyy)均为日在前的格式,可用以下两种方法正确转换:
方法一:用format='mixed'强制日优先
直接在pd.to_datetime中指定dayfirst=True,让Pandas优先按日/月/年的逻辑解析日期:
import pandas as pd # 构造样本数据 data = {'Date': ['01/12/2022', '22/02/2012', '12-Jan-2023', '19-10-2000', '03/Feb/2021']} df = pd.DataFrame(data) # 转换日期列 df['Date'] = pd.to_datetime(df['Date'], format='mixed', dayfirst=True)
方法二:显式列出所有格式(更精准)
把所有可能的日期格式列出来,让Pandas逐个尝试匹配,彻底避免歧义:
import pandas as pd data = {'Date': ['01/12/2022', '22/02/2012', '12-Jan-2023', '19-10-2000', '03/Feb/2021']} df = pd.DataFrame(data) # 定义所有待匹配的日期格式 date_formats = ['%d/%m/%Y', '%d-%m-%Y', '%d-%b-%Y', '%d/%b/%Y'] df['Date'] = pd.to_datetime(df['Date'], format=date_formats, dayfirst=True)
验证结果
转换后可通过以下代码确认类型和结果:
# 查看列类型 print(df.dtypes) # 查看转换后的日期 print(df['Date'])
输出会显示Date列为datetime64[ns]类型,且所有日期都按日/月/年的正确逻辑解析(比如01/12/2022会被转为2022-12-01)。
内容的提问来源于stack exchange,提问作者Sunil
相关产品推荐
相关产品推荐

