You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas DataFrame中转换非规范格式的日期为正确格式?

解决混合格式日期转换问题

针对你DataFrame里的两种日期格式(月份 年 日和年 月份 日),可以用两种方法实现统一转换:

方法一:正则提取重组(性能更优)

通过正则表达式提取出年、月、日的各个部分,不管原始顺序,再重组为统一格式后转换:

import pandas as pd

df = pd.DataFrame({'dates' : ['December 2021 17', '2005 July 01', 'December 2000 01', '2008 May 11', 
                              'October 2000 04', 'September 2016 04', 'May 1998 09']})

# 用正则匹配两种格式的日期,提取各部分
pattern = r'(?:(?P<month>[A-Za-z]+)\s+(?P<year>\d{4})\s+(?P<day>\d{2})|(?P<year2>\d{4})\s+(?P<month2>[A-Za-z]+)\s+(?P<day2>\d{2}))'
matches = df['dates'].str.extract(pattern)

# 合并相同字段的提取结果
df['year'] = matches['year'].combine_first(matches['year2'])
df['month'] = matches['month'].combine_first(matches['month2'])
df['day'] = matches['day'].combine_first(matches['day2'])

# 重组为"年 月份 日"格式,再转换为datetime
df['datetime'] = pd.to_datetime(df[['year', 'month', 'day']].agg(' '.join, axis=1), format='%Y %B %d')

# 可选:删除中间生成的列
df = df.drop(['year', 'month', 'day'], axis=1)

方法二:用dateutil自动解析(代码更简洁)

dateutil.parser能自动识别多种不规则日期格式,适合快速处理小规模数据:

import pandas as pd
from dateutil import parser

df = pd.DataFrame({'dates' : ['December 2021 17', '2005 July 01', 'December 2000 01', '2008 May 11', 
                              'October 2000 04', 'September 2016 04', 'May 1998 09']})

df['datetime'] = df['dates'].apply(parser.parse)

注意:如果处理超大规模数据集,方法一的性能会优于方法二——前者是向量化操作,后者是逐行处理的apply。

内容的提问来源于stack exchange,提问作者Adam Idris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 23:17:02