7

考虑这个数据框:

df = pd.DataFrame({u'A': {2.0: 2.2,
  7.0: 1.4,
  8.0: 1.4,
  9.0: 2.2},  u'B': {2.0: 7.2,
  7.0: 6.3,
  8.0: 4.4,
  9.0: 5.0}})

看起来像这样:

      A       B
2    2.2     7.2
7    1.4     6.3
8    1.4     4.4
9    2.2     5.0

我想获得带有标签27(数字,而不是字符串)的索引

df.loc[[2, 7]]

给出错误!

IndexError: indices are out-of-bounds

但是,df.loc[7]并且df.loc[2]工作正常且符合预期。另外,如果我用字符串而不是数字定义数据帧索引:

df2 = pd.DataFrame({u'A': {'2': 2.2,
  '7': 1.4,
  '8': 1.4,
  '9': 2.2},
 u'B': {'2': 7.2,
  '7': 6.3,
  '8': 4.4,
  '9': 5.0}})

df2.loc[['2', '8']]

它工作正常。

这不是我所期望的行为df.loc(它是一个错误还是只是一个陷阱?)我可以传递一个数字数组作为标签索引而不仅仅是位置吗?

我可以将所有索引转换为字符串,然后进行操作,.loc但这对我的其余代码来说非常不方便。

谢谢你的时间!

4

1 回答 1

8

这是 0.12 中的一个错误。0.13 版修复了这个问题(IOW、标签选择、传递列表时数字或字符串是否应该工作)。

可以这样做(虽然使用内部方法):

In [10]: df.iloc[df.index.get_indexer([2,7])]
Out[10]: 
     A    B
2  2.2  7.2
7  1.4  6.3
于 2013-11-07T19:35:41.083 回答