包含for循环的Python函数只返回最后的结果

问题描述 投票:1回答:2

在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上搜索类似的主题,但没有遇到任何问题,也许我错过了。任何帮助都非常感谢!!

python pandas function for-loop plot
2个回答
0
投票

你的问题是情节创建了一个情节,但是当你在循环中再次调用它时,它会覆盖之前的一个情节调用。因此,您要做的是将列表中的每个绘图保存或者将它们保存为文件:

 p = a.plot()
 fig = p[0].get_figure()
 fig.savefig("filename.png")

查看savefigDataFrame.plot编辑从How to save Pandas pie plot to a file?


0
投票

我列出了两个选项。

第一种选择是在一个图中绘制所有数据帧:

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
© www.soinside.com 2019 - 2024. All rights reserved.