无法使用 seaborn barplot 绘制数据框
Unable to plot dataframe using seaborn barplot
我已经能够使用 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
您收到错误的原因是,当您通过分组 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)
上面的所有解决方案都会产生下面相同的图。
我已经能够使用 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
您收到错误的原因是,当您通过分组 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)
上面的所有解决方案都会产生下面相同的图。