将含多格式日期的DataFrame列转换为datetime类型
统一转换多种格式日期为datetime类型的解决方案
核心自动识别方案
直接使用pandas的pd.to_datetime()并启用混合格式识别,这是适配多格式日期最便捷的方式,能覆盖你提到的所有格式:
import pandas as pd # 替换成你的DataFrame名称和日期列名 df['date_col'] = pd.to_datetime(df['date_col'], format='mixed', errors='coerce')
format='mixed':让pandas自动检测每行日期的格式,完美兼容YYYY-MM-DD、YYYY.MM.DD、YYYY Month DD这类格式errors='coerce':将无法识别的无效日期转为NaT(缺失值),便于后续排查处理
手动兜底处理异常值
如果仍有部分日期转换失败,可以手动列出所有可能的格式,让pandas逐一尝试匹配:
# 枚举所有可能的日期格式 possible_formats = [ '%Y-%m-%d', '%Y.%m.%d', '%Y %B %d' # 对应'1968 October 26'这类带月份全称的格式 ] # 仅对未转换成功的行(NaT值)尝试不同格式 for fmt in possible_formats: mask = pd.isna(df['date_col']) df.loc[mask, 'date_col'] = pd.to_datetime(df.loc[mask, 'date_col'], format=fmt, errors='ignore')
验证转换结果
转换完成后,用以下代码确认效果:
# 查看列的数据类型,应为datetime64 print(df['date_col'].dtype) # 统计转换失败的数量(即NaT的个数) print(df['date_col'].isna().sum()) # 随机抽查部分转换结果 print(df['date_col'].sample(5))
注意事项
- 确保pandas版本在2.0及以上,
format='mixed'才支持;版本过低的话先升级:pip install --upgrade pandas - 若日期字符串含多余符号(比如括号、空格),可以先用
str.replace()清洗后再转换,例如df['date_col'] = df['date_col'].str.replace(r'[()]+', '', regex=True)
内容的提问来源于stack exchange,提问作者Rohit Pawar
相关产品推荐
相关产品推荐

