Pandas索引不接受整数lis

2024-04-23 22:47:08 发布

您现在位置:Python中文网/ 问答频道 /正文

使用pandas索引,是否可以使用整数列表?I get KeyError:“使用整数列表时,标签[xxxx]不在[columns]”中(即使多索引级别中的值被格式化为字符串):

vals = np.random.randn(4)
df = pd.DataFrame({'l1': ['A', 'B', 'C', 'B'], 'l2': ['9876', '6789', '5432',
    '1234'], 'l3': ['Y', 'X', 'Y', 'Y'], 'value': vals})
df.set_index(['l1', 'l2', 'l3'], inplace=True)

idx = pd.IndexSlice

# None of the following works
df.loc[idx[:, 6789, :]]
df.loc[idx[:, [6789, 1234], :]]

df.reset_index(inplace=True)
df.l2 = df.l2.astype('str')
df.set_index(['l1', 'l2', 'l3'], inplace=True)
df.loc[idx[:, '6789', :]]

Tags: truel1pandasdf列表index整数loc
2条回答

首先,您的索引列是由字符串组成的,这不可能起作用。在

要分割单个值,请使用惯用用法xs

df.xs('6789', level='l2')

          value
l1 l3          
B  X  -1.955361

对于值列表,请将axis参数指定为loc

^{pr2}$

注意这也与标量的xs相同

df.loc(axis=0)[idx[:, '6789', :]]

               value
l1 l2   l3          
B  6789 X  -1.955361

备选方案:

In [76]: df.loc[pd.IndexSlice[:, '6789', :], :]
Out[76]:
               value
l1 l2   l3
B  6789 X   1.306962

PS注意字符串值'6789'和最后一个:

^{pr2}$

相关问题 更多 >