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

Python使用正则提取DataFrame日期列月份失败及日期处理方案咨询

问题1:当前代码无法提取月份的原因

  • 正则逻辑完全不符合需求:你写的正则.*([1-2][0-9]{3})的匹配目标是四位年份数字(1000-2999区间),和你要提取的两位月份完全不相关,就算匹配成功拿到的也是2020这类年份值,不是月份。
  • 异常未处理导致返回NaN:如果出现匹配失败的场景,re.match会返回None,此时调用.group(1)会触发异常,pandas在apply过程中遇到未捕获的异常时对应位置就会被置为NaN。

问题2:处理用户输入日期的更优方案

不要手动写正则解析日期,pandas内置的pd.to_datetime()函数已经兼容绝大多数常见的日期格式(包括你示例中的mm/dd/yyyy、yyyy-mm-dd HH:MM:SS等),可以直接自动识别转换为标准datetime对象,后续提取月份、年份、日期都非常方便,示例代码如下:

import pandas as pd

# 自动识别转换为datetime类型
df['Data'] = pd.to_datetime(df['Data'])
# 提取数字格式月份(1-12)
df['month_num'] = df['Data'].dt.month
# 提取两位字符串格式月份(01-12)
df['month_str'] = df['Data'].dt.strftime('%m')

如果遇到非常见的日期格式,还可以通过format参数指定解析规则,或者用errors参数处理异常值,比手动写正则的兼容性和稳定性高很多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:39:00