在python中使用pandas模块进行数据分析时,我试图创建一个可以将以下过程应用于数据帧列表的函数。 (注意:P1_Assessment
是我想分析的数据框之一。)
P1_Assessment[P1_Assessment > 1].sum(axis=0).astype(int).sort_values(ascending = False).plot(kind = 'bar')`
因此,为了分析一个代码块中的数据帧列表,我尝试创建一个函数,如下所示:
def assess_rep(dataframe):
for i in dataframe:
a = i[i > 1].sum(axis= 0).astype(int).sort_values(ascending = False)
a.plot(kind = 'bar')
return
但是当我在数据帧列表上使用该函数时,仅返回了最后一个数据帧的分析结果。
我试图在stackoverflow上搜索类似的主题,但没有遇到任何问题,也许我错过了。任何帮助都非常感谢!!
你的问题是情节创建了一个情节,但是当你在循环中再次调用它时,它会覆盖之前的一个情节调用。因此,您要做的是将列表中的每个绘图保存或者将它们保存为文件:
p = a.plot()
fig = p[0].get_figure()
fig.savefig("filename.png")
查看savefig和DataFrame.plot编辑从How to save Pandas pie plot to a file?
我列出了两个选项。
第一种选择是在一个图中绘制所有数据帧:
def assess_rep(dataframe_list):
for df in dataframe_list:
a = df[df > 1].sum(axis= 0).astype(int).sort_values(ascending = False)
ax = a.plot(kind = 'bar')
return ax
您可以将图形保存为png文件:
ax = assess_rep(dataframe_list)
ax.get_figure().savefig('all_dataframe.png')
第二个选项是绘制每个数据帧的分离并在此过程中保存数字:
import matplotlib.pyplot as plt
def asses_rep(dataframe_list):
ax_list = []
counter = 1
for df in dataframe_list:
print(counter)
fig = plt.figure(counter)
a = df[df > 1].sum(axis= 0).astype(int).sort_values(ascending = False)
ax = a.plot(kind='bar', fig=fig)
ax_list.append(ax)
ax.get_figure().savefig('single_df_%i.png'%counter)
counter += 1
return ax_list