Pandasデータからヒストグラムが描けない場合にはnumpyのflatten() を使おう

Pandasデータからヒストグラムが描けない場合にはnumpyのflatten() を使おう

Pandasデータからある項目をスライスしてその値でヒストグラムを作成するときにうまく行かなくて困ったことがありませんでしょうか。
具体的には次のようなデータがあったとします。

このデータからグレードの列を抜き出してヒストグラムを描くとします。

うまく行く場合

次のようにデータをスライスするとseries形式のデータとなります。

grade = data['グレード']

グラフを描きます。

plt.title('bens')
plt.grid(True)
plt.ylabel('count')
plt.xlabel('grade')

plt.hist(g,bins=5)
plt.show()

この場合は次のようになりうまくいきます。

うまく行かない場合

列の見出しに何らか問題のある文字列が使われてうまく列の指定ができない場合、ilocを使います。
この時が問題です。

g = data.iloc[:,5:6]

グラフを描きます。

plt.title('bens')
plt.grid(True)
plt.ylabel('count')
plt.xlabel('grade')

plt.hist(g,bins=5)
plt.show()

この場合はヒストグラムが正確に描かれません。

この原因はデータがseries形式ではなくDataFrame形式になっているからです。

このような、場合は一旦nd.array形式にしてからflatten()を使うと1次元のlist形式になってくれます。
これで正しくヒストグラムが描かれます。

これはヒストグラムが1次元のリストかPandasならseries形式のものである必要があるためです。