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

Pandas提取索引字符串生成月年列时遇KeyError错误求助

解决KeyError: 'SKU'并提取月份年份

嘿,我来帮你搞定这个问题!你遇到的KeyError: 'SKU'是个很典型的小误区——SKU并不是你的DataFrame的普通列,而是列的名称(也就是df.columns.name),那些像Jan10_Sales的字符串其实是你的DataFrame的索引(index),这就是为什么你直接访问df['SKU']会报错。

从你给出的df.columns输出也能验证这一点:

Index(['Noodles','FaceCream','BodyWash','Powder','Soap'], dtype='object', name='SKU')

这里的name='SKU'说明列的整体名称是SKU,而不是存在一列叫SKU。

两种解决方案供你选择:

方案1:直接操作索引生成新列(更高效)

不用把索引转成列,直接对索引使用字符串切片:

# 提取月份(取前3个字符)
df['month'] = df.index.str[:3]
# 提取年份(取第3-5位,拼接'20'得到完整年份)
df['year'] = '20' + df.index.str[3:5]

比如Jan10_Sales会被提取出month='Jan',year='2010'。

方案2:把索引转成普通列后操作

如果你更习惯用列来处理,可以先把索引重置为名为SKU的列,再执行切片:

# 将索引转为名为SKU的列
df = df.reset_index(names='SKU')
# 提取月份
df['month'] = df['SKU'].str[:3]
# 提取并补全年份
df['year'] = '20' + df['SKU'].str[3:5]

补充说明:

你之前写的df['year']=df['SKU'].str[4:5]只能提取到年份的第二位(比如Jan10_Sales里的0),所以改成str[3:5]才能拿到完整的两位年份10,再拼接'20'就得到了2010这样的完整年份,更实用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 13:24:07