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

Python从日期字符串提取月份报list index out of range问题求助

问题原因分析

你的代码出现list index out of range错误,核心问题有两个:

  • 缺失值判断失效:用pd.to_datetime(..., errors='coerce')转换后,无效日期会变成NaT(pandas的时间缺失值),而非np.nan。你用x != np.nan的判断完全不起作用——因为NaT != np.nan结果为True,所以即使是无效的NaT值,代码仍会执行str(x).split('-')[1]。
  • 字符串拆分出错:当x是NaT时,str(x)会得到字符串'NaT',用'-'拆分后得到的列表是['NaT'],仅含一个元素,取索引[1]自然会越界;而取[0]时刚好取到'NaT',所以不会报错。

另外要注意:判断缺失值绝对不能用==或!=,因为np.nan和NaT都不等于自身,正确方式是用pd.isna(x)。

修正方案

方案1:修复自定义函数

把缺失值判断改成正确逻辑,同时处理NaT情况:

def get_month(x):
    if not pd.isna(x):
        return str(x).split('-')[1]
    else:
        return None

df['month'] = pd.to_datetime(df['release_date'], errors='coerce').apply(get_month)

方案2:用pandas内置属性更高效

既然已经转成datetime类型,完全不需要自己写函数拆分字符串,直接用dt.month提取月份,还能自动处理缺失值:

df['month'] = pd.to_datetime(df['release_date'], errors='coerce').dt.month
# 如果需要字符串类型的月份,再加一步转换
df['month'] = df['month'].astype(str)

这个方法代码更简洁,运行效率也比自定义apply函数高很多,尤其适合数据量较大的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 01:37:13