sam*_*ams 8 python pandas seaborn
我已经能够使用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.
Ale*_*der 16
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
Run Code Online (Sandbox Code Playgroud)
您收到错误的原因是,当您invYr通过分组创建时invoices,该FinYear列将成为索引并且不再是列.有几个解决方案:
1)一种解决方案是直接指定源数据.您需要为图表指定正确的数据源.如果您没有指定data参数,Seaborn不知道哪个数据框/系列具有"FinYear"或"Amount"列,因为这些只是文本值.例如,您必须指定y=invYr.Amount指定数据框/系列和您想要绘制的列.这里的技巧是直接访问数据帧的索引.
sns.barplot(x=invYr.index, y=invYr.Amount)
Run Code Online (Sandbox Code Playgroud)
2)或者,您可以指定数据源,然后直接引用其列.请注意,分组数据框的索引已重置,以便该列再次可用.
sns.barplot(x='FinYear', y='Amount', data=invYr.reset_index())
Run Code Online (Sandbox Code Playgroud)
3)第三种解决方案是指定as_index=False何时执行groupby,使列在分组数据帧中可用.
invYr = invoices.groupby('FinYear', as_index=False).Amount.sum()
sns.barplot(x='FinYear', y='Amount', data=invYr)
Run Code Online (Sandbox Code Playgroud)
以上所有解决方案都在下面生成相同的图
| 归档时间: |
|
| 查看次数: |
12407 次 |
| 最近记录: |