web-dev-qa-db-ja.com

海生まれのバープロットを使用してデータフレームをプロットできません

pandas groupbyを使用して新しいDataFrameを作成できましたが、barplotを作成するとエラーが発生します。 groupbyコマンド:

invYr = invoices.groupby(['FinYear']).sum()[['Amount']]

これにより、私には正しいように見える新しいDataFrameが作成されます。

新しいDataFrame invYr

ランニング:

sns.barplot(x='FinYear', y='Amount', data=invYr)

エラーが発生します:

ValueError: Could not interperet input 'FinYear'

この問題はFinYearであるインデックスに関連しているようですが、残念ながらreindexを使用しても問題を解決できませんでした。

9
sams
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)

上記のすべてのソリューションは、以下の同じプロットを生成します。

enter image description here

16
Alexander