DataFrame子集选取出现KeyError: ['1-30'] not in index错误的解决求助
解决DataFrame列索引KeyError问题:列名空格导致的匹配失败
兄弟,我一眼就看出问题出在哪了——你代码里写的列名和实际DataFrame的列名完全不匹配!
你提供的列名信息里,第二列的真实名称是1 - 30(注意数字1、减号、30之间都有空格),但你在代码里用的是1-30(没有空格),这两个在Python眼里是完全不同的字符串,自然会抛出KeyError啦!
给你几个实用的解决办法:
直接使用正确的列名(最快捷)
把代码里的列名改成带空格的版本,和真实列名完全一致:Sub_DF = DF[["Name","1 - 30"]]先确认列名再复制粘贴(新手避坑必备)
手动输入列名很容易出错,你可以先打印出所有列名,直接复制粘贴到代码里:# 打印所有列名 print(DF.columns) # 输出示例:Index(['Name', '1 - 30', 'Cred.limit'], dtype='object') # 直接复制'1 - 30'到索引代码中即可重命名列名(一劳永逸)
如果觉得带空格的列名太麻烦,可以一次性把列名改成无空格的格式,后续操作就不用再纠结空格了:DF = DF.rename(columns={"1 - 30": "1-30"}) # 之后再执行你的原代码就没问题了 Sub_DF = DF[["Name","1-30"]]
另外,你提到用iloc没解决问题,可能是用法不对?iloc是按列的位置索引(从0开始计数),前两列的位置是0和1,所以正确的写法是:
Sub_DF = DF.iloc[:, [0, 1]]
这个方法不管列名是什么,都能精准取到前两列,适合列名复杂的场景。
新手最容易踩字符串匹配的坑,比如大小写、空格、特殊符号不一致,以后遇到这类问题先仔细核对实际的列名哦!
内容的提问来源于stack exchange,提问作者Raf
相关产品推荐
相关产品推荐

