python - 无法设置 Pandas 数据框的索引 - 获取 "KeyError"

标签 python pandas dataframe set row

我生成了一个如下所示的数据框 (summaryDF):

   accuracy        f1  precision    recall
0     0.494  0.722433   0.722433  0.722433
0     0.290  0.826087   0.826087  0.826087
0     0.274  0.629630   0.629630  0.629630
0     0.278  0.628571   0.628571  0.628571
0     0.288  0.718750   0.718750  0.718750
0     0.740  0.740000   0.740000  0.740000
0     0.698  0.765133   0.765133  0.765133
0     0.582  0.778547   0.778547  0.778547
0     0.682  0.748235   0.748235  0.748235
0     0.574  0.767918   0.767918  0.767918
0     0.398  0.711656   0.711656  0.711656
0     0.530  0.780083   0.780083  0.780083

因为我知道其中每一行应该是什么,所以我使用这段代码来设置每一行的名称(这些不是实际的行名称,只是为了论证)。

summaryDF = summaryDF.set_index(['A','B','C', 'D','E','F','G','H','I','J','K','L'])

但是,我得到:

level = frame[col].values
  File "/Users/me/anaconda/lib/python2.7/site-packages/pandas/core/frame.py", line 1797, in __getitem__
    return self._getitem_column(key)
  File "/Users/me/anaconda/lib/python2.7/site-packages/pandas/core/frame.py", line 1804, in _getitem_column
    return self._get_item_cache(key)
  File "/Users/me/anaconda/lib/python2.7/site-packages/pandas/core/generic.py", line 1084, in _get_item_cache
    values = self._data.get(item)
  File "/Users/me/anaconda/lib/python2.7/site-packages/pandas/core/internals.py", line 2851, in get
    loc = self.items.get_loc(item)
  File "/Users/me/anaconda/lib/python2.7/site-packages/pandas/core/index.py", line 1572, in get_loc
    return self._engine.get_loc(_values_from_object(key))
  File "pandas/index.pyx", line 134, in pandas.index.IndexEngine.get_loc (pandas/index.c:3824)
  File "pandas/index.pyx", line 154, in pandas.index.IndexEngine.get_loc (pandas/index.c:3704)
  File "pandas/hashtable.pyx", line 686, in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:12280)
  File "pandas/hashtable.pyx", line 694, in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:12231)
KeyError: 'A'

我不知道自己做错了什么,并且进行了广泛的研究。有什么想法吗?

最佳答案

我猜你和@jezrael 误解了 pandas 文档中的一个例子:

df.set_index(['A', 'B'])

AB 是本例中的列名/标签:

In [55]: df = pd.DataFrame(np.random.randint(0, 10, (5,4)), columns=list('ABCD'))

In [56]: df
Out[56]:
   A  B  C  D
0  6  9  7  4
1  5  1  3  4
2  4  4  0  5
3  9  0  9  8
4  6  4  5  7

In [57]: df.set_index(['A','B'])
Out[57]:
     C  D
A B
6 9  7  4
5 1  3  4
4 4  0  5
9 0  9  8
6 4  5  7

documentation说它应该是列标签的列表/数组

所以你在找:

In [58]: df.set_index([['A','B','C','D','E']])
Out[58]:
   A  B  C  D
A  6  9  7  4
B  5  1  3  4
C  4  4  0  5
D  9  0  9  8
E  6  4  5  7

但正如@jezrael 所建议的那样,df.index = ['A','B',...] 是更快且更惯用的方法...

关于python - 无法设置 Pandas 数据框的索引 - 获取 "KeyError",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38421170/

相关文章:

python - 使用 Pandas 将 JSON 转换为具有特定字段的 CSV

python - 如何根据python中的多个条件计算列中的唯一行

python - 基于其他行的过去值到当前值的新行

python - Pandas 数据框按日期排序,然后分配字母 A-Z

python - 如何以元组列表的形式处理查询参数?

python - 在 Pypi 包中包含静态文件

python - 将 NumPy 数组转换为带有列的 Pandas Dataframe

python - 在Python中比较pandas数据帧的单列值(将perl转换为python代码)

python - 如何量化两个图像之间的差异?

c# - 具有返回值和输出参数的 Python NET 调用 C# 方法