マルチ インデックス データフレームで dropna を呼び出した後、インデックス内のレベル メタデータが更新されていないように見えます。これはバグですか?
In [1]: import pandas
In [2]: print pandas.__version__
0.10.1
In [3]: df_multi = pandas.DataFrame(index=[[1, 2],['a', 'b',]],
data=[[float('nan'), 5], [6, 7]])
In [4]: print df_multi
0 1
1 a NaN 5
2 b 6 7
In [5]: df_multi = df_multi.dropna(axis=0, how='any')
In [6]: print df_multi
0 1
2 b 6 7
In [7]: print df_multi.index
MultiIndex
[(2, b)]
In [8]: print df_multi.index.levels
[Int64Index([1, 2], dtype=int64), Index([a, b], dtype=object)]
上記の MultiIndex には (2, b) しかありませんが、1 と 'a' が index.levels にあると報告されていることに注意してください。
私が持っている回避策は、次のように「クリーンな」マルチインデックスで再インデックスすることです:
In [10]: c_clean = pandas.MultiIndex.from_tuples(df_multi.index)
In [11]: df_multi = df_multi.reindex(c_clean)
In [12]: print df_multi
0 1
2 b 6 7
In [13]: print df_multi.index.levels
[Int64Index([2], dtype=int64), Index([b], dtype=object)]
編集:
この問題は、.ix を使用したスライス中にも発生し、おそらく他のインデックス操作でも発生します。