起きたエラー
seabornでbarplotしようとした際に以下のエラーに遭遇。
NotImplementedError: isna is not defined for MultiIndex
実行したコードは以下(データは某Titanicを使用):
data_count = train.groupby(["Sex","Survived"])["Survived"].count()
sns.barplot(x=data_count.keys(), y=data_count.values)
plt.show()
どうやら、data_count.keys()の戻り値がMultiIndexになっているらしい。
※groupbyで2つカラムを入れるとMultiIndexになるっぽいですね。
解決法
MUltiIndex.to_flat_index()を使うとOK!
※MultiIndexではなくIndexを使わないといけない。
data_count = train.groupby(["Sex","Survived"])["Survived"].count()
sns.barplot(x=data_count.keys().to_flat_index(), y=data_count.values)
plt.show()
MuntiIndexって?
↓みたいなやつ
female child |
adult |
male child |
adult |
---|
適当な例ですが、
まず女性/男性で分けた後に
女性かつ子ども/大人、男性かつ子ども/大人
に分けるイメージです。
今回のdata_count.keys()の戻り値は実際にこのようになっていることが確認できます。
MultiIndex([('female', 0),
('female', 1),
( 'male', 0),
( 'male', 1)],
names=['Sex', 'Survived'])
MultiIndexをto_flat_index()で展開すると普通のIndexになっていることも確認できます。
Index([('female', 0), ('female', 1), ('male', 0), ('male', 1)], dtype='object')
修正後取得したbarplotでも上記Indexを確認できました。
PandasMultiIndexについては以下も参照