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

如何快速识别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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 21:15:59