无法使用 seaborn barplot 绘制数据框

Unable to plot dataframe using seaborn barplot

我已经能够使用 pandas groupby 创建一个新的 DataFrame 但我在创建 barplot 时遇到错误。 groupby 命令:

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

这会创建一个我认为正确的新 DataFrame

New DataFrame invYr

运行:

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

您收到错误的原因是,当您通过分组 invoices 创建 invYr 时,FinYear 列成为索引,不再是列。有几种解决方案:

1) 一种解决方案是直接指定源数据。您需要为图表指定正确的数据源。如果您没有指定 data 参数,Seaborn 不知道哪个 dataframe/series 具有 'FinYear' 或 'Amount' 列,因为这些只是文本值。例如,您必须指定 y=invYr.Amount 以同时指定 dataframe/series 和您要绘制图表的列。这里的技巧是直接访问数据帧的索引。

sns.barplot(x=invYr.index, y=invYr.Amount)

2) 或者,您可以指定数据源,然后直接引用其列。请注意,分组数据框已重置其索引,以便该列再次可用。

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

3) 第三种解决方案是在执行 groupby 时指定 as_index=False,使该列在分组数据框中可用。

invYr = invoices.groupby('FinYear', as_index=False).Amount.sum()
sns.barplot(x='FinYear', y='Amount', data=invYr)

上面的所有解决方案都会产生下面相同的图。