如何在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
相关产品推荐
相关产品推荐

