如何快速识别Pandas中多种日期格式并提取年月?
多格式日期数据处理方案
1. 快速识别所有日期格式
无需手动排查,通过正则匹配分类统计即可高效梳理格式分布:
- 先定义常见日期格式对应的正则规则,编写函数判断每个日期字符串的所属格式
- 对目标列应用函数后,直接统计各类格式的出现次数
代码示例:
import pandas as pd import re # 初始化你的数据 MWE = [["05/2003"], ["10/1998"], ["1/4/2014"], ["12/09/1979"], ["Sept 12, 2005"], ["20221204"]] df = pd.DataFrame(MWE, columns=['year']) def get_date_format(s): # 匹配各类格式的正则映射 format_map = { r'^\d{2}/\d{4}$': 'MM/YYYY', r'^\d{1,2}/\d{1,2}/\d{4}$': 'DD/MM/YYYY 或 MM/DD/YYYY', r'^[A-Za-z]{3} \d{1,2}, \d{4}$': 'Mon DD, YYYY', r'^\d{8}$': 'YYYYMMDD' } for pattern, fmt_label in format_map.items(): if re.match(pattern, s): return fmt_label return '未知格式' # 新增格式列并统计分布 df['date_format'] = df['year'].apply(get_date_format) print(df['date_format'].value_counts())
运行后会直接输出每种格式的出现次数,快速掌握数据的格式构成。
2. 安全提取年份/月份
避免直接字符串切片的错误,优先将日期解析为datetime类型后提取时间分量:
- 先尝试自动推断格式解析,无法解析的标记为缺失值
- 针对未解析的条目,手动指定格式列表批量尝试解析
- 从标准日期类型中提取年份、月份,确保准确性
代码示例:
# 第一步:自动推断解析日期 df['datetime'] = pd.to_datetime(df['year'], errors='coerce', infer_datetime_format=True) # 第二步:对未解析的条目,尝试指定格式解析 target_formats = ['%m/%Y', '%d/%m/%Y', '%m/%d/%Y', '%b %d, %Y', '%Y%m%d'] for fmt in target_formats: mask = df['datetime'].isna() df.loc[mask, 'datetime'] = pd.to_datetime(df.loc[mask, 'year'], format=fmt, errors='coerce') # 第三步:提取年份和月份 df['year_only'] = df['datetime'].dt.year df['month_only'] = df['datetime'].dt.month # 查看处理结果 print(df[['year', 'year_only', 'month_only']])
这种方法能最大程度解析合法日期,无法解析的会显示NaN,方便后续单独处理异常值,彻底避免字符串切片导致的错误。
内容的提问来源于stack exchange,提问作者gravityflyer
相关产品推荐
相关产品推荐

