从 pandas 多索引中删除行时出现错误?

bug when removing rows from a pandas multindex?

我正在研究我拥有的数据,这是一个只有一个 'value' 列的深度多重索引。我删除了一些错误数据的行,但随后在索引内容时遇到了问题...有什么想法吗?

初始化示例数据框(不是我的数据):

m=pd.MultiIndex.from_product(
    [sorted(i) for i in [['one','two'],'abcd']],
    names=['nums','lets'])
df1=pd.DataFrame(np.random.randn(len(m)),index=m)

这创造了

nums lets          
one  a     0.433026
     b     1.203037
     c    -0.965066
     d     1.028274
two  a     0.228630
     b     0.445138
     c    -1.136602
     d     0.135137

后跟(删除不良数据)

df2=df1.loc[
    ~((df1.index.get_level_values('nums')=='two')
    &(df1.index.get_level_values('lets')=='c'))]

这只会删除 'two c':

nums lets          
one  a     0.433026
     b     1.203037
     c    -0.965066
     d     1.028274
two  a     0.228630
     b     0.445138
     d     0.135137

这里开始出现问题。

df2.loc[pd.IndexSlice[:,'c']]

失败,这很烦人且出乎意料,但还可以。 但是为什么

df2.loc[pd.IndexSlice[:,'a']]

失败?返回的错误是 键错误:'the label [a] is not in the [columns]'

更奇怪 -

df2.loc[pd.IndexSlice['two','a']]

完全没问题。

我使用的是最新的 anaconda,所以 pandas 0.14.1 想法?

查看文档 here

您违反了 IndexSlice 的用法 - 这在警告框中有明确说明