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
相关产品推荐
相关产品推荐

