从 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 的用法 - 这在警告框中有明确说明
我正在研究我拥有的数据,这是一个只有一个 '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 的用法 - 这在警告框中有明确说明