如何解决 KeyError:u“[Index([..], dtype='object')] 中没有 [列]”

Posted

技术标签:

【中文标题】如何解决 KeyError:u“[Index([..], dtype=\'object\')] 中没有 [列]”【英文标题】:How To Solve KeyError: u"None of [Index([..], dtype='object')] are in the [columns]"如何解决 KeyError:u“[Index([..], dtype='object')] 中没有 [列]” 【发布时间】:2019-09-03 06:35:35 【问题描述】:

我正在尝试根据我在 github here 中找到的内容创建一个 SVM 模型,但它一直返回此错误。

Traceback (most recent call last):
  File "C:\Users\Me\Documents\#e\projects\Sign-Language-Glove-master\modeling.py", line 22, in <module>
    train_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

谢谢。

【问题讨论】:

还尝试将您的 csv 作为制表符分隔的数据框加载:dataframe= pd.read_csv("letera.csv", sep='\t') 【参考方案1】:

问题是你的列名中有空格;这是我在保存数据并加载数据框时得到的结果:

df.columns
# result:
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']] # works OK

但可以说,在列名中包含空格不是好习惯(您已经看到会发生什么!);所以最好在加载过程中消除它们。这是执行此操作的端到端代码(还消除了不必要的第二个数据帧):

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']] # works OK

【讨论】:

【参考方案2】:

就我而言,这是因为我的数据框中的列名有空格。我通过用_ 替换空格来重命名我的df 中的列名。

# remove special character
df.columns = df.columns.str.replace(' ', '')

【讨论】:

【参考方案3】:

我在尝试使用 apply() 结果在数据框上创建新列时遇到了同样的错误:

>>> df[["foo","bar"]] = df.apply(lambda r: ["foobar","baz"], axis=1)
"None of [Index(['foo', 'bar'], dtype='object')] are in the [columns]"

解决方案是简单地将result_type="expand" 参数用于apply()

df[["foo","bar"]] = df.apply(lambda r: ["foobar","baz"], axis=1, result_type="expand")

我找到了这个解决方案on this answer,值得点赞。

【讨论】:

【参考方案4】:

试试

import pandas as pd
dataframe= pd.read_csv("lettera.csv", delimiter=','sep=r', ') 

", ;, ", - 我也遇到了同样的问题,我在你的数据中看到了这个(", ")

如果您可以在数据集中看到单独的符号,则可以使用sep =

【讨论】:

以上是关于如何解决 KeyError:u“[Index([..], dtype='object')] 中没有 [列]”的主要内容,如果未能解决你的问题,请参考以下文章

python-如何解决KeyError:2?

接收 KeyError:“[Int64Index([ ... dtype='int64', length=1323)] 均不在 [columns] 中”

导入 python 模块时如何解决 KeyError?

在 Pandas 中使用 groupby 函数时如何解决“keyerror”?

KeyError:“[Int64Index dtype='int64', length=9313)] 都不在 [columns] 中”

Pandas - KeyError: '[] not in index' 训练 Keras 模型时