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

使用pd.to_datetime转换日期列全为NaT,如何提取月份?

解决混合格式日期列提取月份的问题

问题原因

pd.to_datetime默认无法自动识别这种纯月份缩写/日-月份缩写的混合格式,因此返回全量NaT。以下是两种可靠的解决方法:


方法一:提取月份缩写直接映射(推荐,更稳定)

这种方法跳过完整日期解析,直接提取核心的月份缩写并映射为目标格式,适合仅需月份的场景:

  1. 提取字符串中的月份缩写
    用正则匹配字符串里的3位月份缩写(不管前面是否有日和横杠):

    df['month_abbr'] = df['date'].str.extract(r'([A-Za-z]{3})', expand=False)
    
  2. 创建月份映射字典
    定义缩写到两位数月份的对应关系:

    month_map = {
        'Jan': '01', 'Feb': '02', 'Mar': '03', 'Apr': '04',
        'May': '05', 'Jun': '06', 'Jul': '07', 'Aug': '08',
        'Sep': '09', 'Oct': '10', 'Nov': '11', 'Dec': '12'
    }
    
  3. 映射并处理缺失值
    将匹配到的缩写转成月份,无法识别的替换为指定文本:

    df['month'] = df['month_abbr'].map(month_map).fillna('Date not given')
    

方法二:指定多格式解析日期

通过给pd.to_datetime传递格式列表,让它尝试多种规则解析混合格式:

  1. 解析混合格式日期
    同时适配纯月份缩写(%b)和日-月份缩写(%d-%b)两种格式:

    df['date_parsed'] = pd.to_datetime(df['date'], errors='coerce', format=['%b', '%d-%b'])
    
  2. 提取月份并处理缺失值
    用dt.strftime('%m')生成两位数月份,缺失值替换为指定文本:

    df['month'] = df['date_parsed'].dt.strftime('%m').fillna('Date not given')
    

完整示例代码

import pandas as pd

# 测试数据
data = {'date': ['Oct', 'Jun', '15-Oct', '27-Nov', '26-Sep', 'invalid_value']}
df = pd.DataFrame(data)

# 方法一实现
df['month_abbr'] = df['date'].str.extract(r'([A-Za-z]{3})', expand=False)
month_map = {
    'Jan': '01', 'Feb': '02', 'Mar': '03', 'Apr': '04',
    'May': '05', 'Jun': '06', 'Jul': '07', 'Aug': '08',
    'Sep': '09', 'Oct': '10', 'Nov': '11', 'Dec': '12'
}
df['month_method1'] = df['month_abbr'].map(month_map).fillna('Date not given')

# 方法二实现
df['date_parsed'] = pd.to_datetime(df['date'], errors='coerce', format=['%b', '%d-%b'])
df['month_method2'] = df['date_parsed'].dt.strftime('%m').fillna('Date not given')

# 输出结果
print(df[['date', 'month_method1', 'month_method2']])

输出结果:

date month_method1 month_method2
0             Oct            10            10
1             Jun            06            06
2          15-Oct            10            10
3          27-Nov            11            11
4          26-Sep            09            09
5  invalid_value Date not given Date not given

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 19:03:24