pandas groupby
を使用して新しいDataFrame
を作成できましたが、barplot
を作成するとエラーが発生します。 groupbyコマンド:
invYr = invoices.groupby(['FinYear']).sum()[['Amount']]
これにより、私には正しいように見える新しいDataFrame
が作成されます。
ランニング:
sns.barplot(x='FinYear', y='Amount', data=invYr)
エラーが発生します:
ValueError: Could not interperet input 'FinYear'
この問題はFinYearであるインデックスに関連しているようですが、残念ながらreindex
を使用しても問題を解決できませんでした。
import pandas as pd
import seaborn as sns
invoices = pd.DataFrame({'FinYear': [2015, 2015, 2014], 'Amount': [10, 10, 15]})
invYr = invoices.groupby(['FinYear']).sum()[['Amount']]
>>> invYr
Amount
FinYear
2014 15
2015 20
エラーが発生する理由は、invYr
をグループ化してinvoices
を作成すると、FinYear
列がインデックスになり、列ではなくなるためです。いくつかの解決策があります:
1)1つの解決策は、ソースデータを直接指定することです。グラフの正しいデータソースを指定する必要があります。 data
パラメータを指定しない場合、Seabornは、列が「FinYear」または「Amount」であるデータフレーム/シリーズを認識しません。これらは単なるテキスト値であるためです。たとえば、y=invYr.Amount
を指定して、グラフ化するデータフレーム/シリーズと列の両方を指定する必要があります。ここでの秘訣は、データフレームのインデックスに直接アクセスすることです。
sns.barplot(x=invYr.index, y=invYr.Amount)
2)または、データソースを指定して、その列を直接参照することもできます。グループ化されたデータフレームのインデックスがリセットされ、列が再び使用可能になることに注意してください。
sns.barplot(x='FinYear', y='Amount', data=invYr.reset_index())
3)3番目の解決策は、groupby
を実行するときにas_index=False
を指定して、グループ化されたデータフレームで列を使用できるようにすることです。
invYr = invoices.groupby('FinYear', as_index=False).Amount.sum()
sns.barplot(x='FinYear', y='Amount', data=invYr)
上記のすべてのソリューションは、以下の同じプロットを生成します。