如何解决 KeyError: u"None of [Index([..], dtype='object')] are in the [columns]"
如何解决 KeyError: u"None of [Index([..], dtype='object')] are in the [columns]"
我正在尝试从我在github上这里找到的代码中创建一个SVM模型,但它一直返回这个错误。
Traceback (most recent call last): File "C:\Users\Me\Documents\#e\projects\Sign-Language-Glove-master\modeling.py", line 22, intrain_features = train[['F1','F2','F3','F4','F5','X','Y','Z','C1','C2']] File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 2934, in __getitem__ raise_missing=True) File "C:\Python27\lib\site-packages\pandas\core\indexing.py", line 1354, in _convert_to_indexer return self._get_listlike_indexer(obj, axis, **kwargs)[1] File "C:\Python27\lib\site-packages\pandas\core\indexing.py", line 1161, in _get_listlike_indexer raise_missing=raise_missing) File "C:\Python27\lib\site-packages\pandas\core\indexing.py", line 1246, in _validate_read_indexer key=key, axis=self.obj._get_axis_name(axis))) KeyError: u"None of [Index([u'F1', u'F2', u'F3', u'F4', u'F5', u'X', u'Y', u'Z', u'C1', u'C2'], dtype='object')] are in the [columns]"
这是我的代码。
import pandas as pd dataframe= pd.read_csv("lettera.csv", delimiter=',') df=pd.DataFrame(dataframe) from sklearn.model_selection import train_test_split train, test = train_test_split(df, test_size = 0.2) train_features = train[['F1','F2','F3','F4','F5','X','Y','Z','C1','C2']]
这是csv文件的内容。
LABEL, F1, F2, F3, F4, F5, X, Y, Z, C1, C2 1, 631, 761, 739, 751, 743, 14120, -5320, 7404, 0, 0 1, 632, 759, 740, 751, 744, 14108, -5276, 7444, 0, 0 1, 630, 761, 740, 752, 743, 14228, -5104, 7680, 0, 0 1, 630, 761, 738, 750, 743, 14256, -5148, 7672, 0, 0 1, 632, 759, 740, 751, 744, 14172, -5256, 7376, 0, 0 1, 632, 759, 742, 751, 746, 14288, -5512, 7412, 0, 0 1, 632, 759, 742, 751, 744, 14188, -5200, 7416, 0, 0 1, 634, 759, 738, 751, 743, 14252, -5096, 7524, 0, 0 1, 630, 759, 739, 751, 743, 14364, -5124, 7612, 0, 0 1, 630, 759, 740, 751, 744, 14192, -5316, 7424, 0, 0 1, 631, 760, 739, 752, 743, 14292, -5100, 7404, 0, 0 1, 634, 759, 738, 751, 742, 14232, -5188, 7468, 0, 0 1, 632, 759, 740, 751, 744, 14288, -5416, 7552, 0, 0 1, 630, 760, 739, 752, 743, 14344, -5072, 7816, 0, 0 1, 631, 760, 739, 752, 743, 14320, -4992, 7444, 0, 0 1, 630, 762, 739, 751, 746, 14220, -5172, 7544, 0, 0 1, 630, 759, 739, 751, 742, 14280, -5176, 7416, 0, 0 1, 630, 760, 738, 752, 740, 14360, -5028, 7468, 0, 0 1, 632, 759, 738, 752, 741, 14384, -5108, 7364, 0, 0 1, 629, 757, 737, 751, 741, 14224, -5108, 7536, 0, 0 1, 629, 758, 740, 751, 744, 14412, -5136, 7956, 0, 0 1, 629, 761, 740, 750, 744, 14468, -4868, 7100, 0, 0 1, 629, 760, 738, 752, 741, 14504, -4964, 6600, 0, 0 1, 629, 758, 738, 749, 741, 14440, -5112, 6828, 0, 0 1, 629, 760, 738, 752, 741, 14484, -5016, 7556, 0, 0
谢谢。
出现这个错误的原因是在使用apply()方法时,尝试在数据帧上创建新的列。解决方法是在apply()方法中添加result_type="expand"参数。
下面是解决这个问题的代码示例:
df[["foo","bar"]] = df.apply(lambda r: ["foobar","baz"], axis=1, result_type="expand")
通过在apply()方法中添加result_type="expand"参数,可以解决这个KeyError错误。这个问题的解决方法来源于stackoverflow上的一个回答,可以在这个链接中找到更多信息:https://stackoverflow.com/a/52363890/812102
当出现KeyError: u"None of [Index([..], dtype='object')] are in the [columns]"这个错误时,问题的原因是列名中存在空格。解决方法是在加载数据时消除空格。以下是具体步骤:
首先,保存数据并按照你所做的那样加载数据帧,你会得到以下结果:
df.columns # 结果: Index(['LABEL', ' F1', ' F2', ' F3', ' F4', ' F5', ' X', ' Y', ' Z', ' C1', ' C2'], dtype='object')
因此,将列名中的空格还原将消除这个错误:
train_features = train[[' F1',' F2',' F3',' F4',' F5',' X',' Y',' Z',' C1',' C2']] # 问题解决
但可以说,在列名中包含空格并不是一个好的做法(你已经看到会发生什么!);因此,最好在加载数据时消除空格。以下是一段完整的代码来实现这一点(同时还消除了不必要的第二个数据帧):
import pandas as pd df= pd.read_csv("lettera.csv", delimiter=',', header=None, skiprows=1, names=['LABEL','F1','F2','F3','F4','F5','X','Y','Z','C1','C2']) from sklearn.model_selection import train_test_split train, test = train_test_split(df, test_size = 0.2) train_features = train[['F1','F2','F3','F4','F5','X','Y','Z','C1','C2']] # 问题解决
通过这样的处理,你将能够解决KeyError: u"None of [Index([..], dtype='object')] are in the [columns]"这个问题。