0
0

起きたエラー

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を確認できました。
download.png

PandasMultiIndexについては以下も参照

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0