循环分组的pandas df并导出单个图

时间:2017-10-16 10:05:29

标签: python python-3.x pandas pandas-groupby

The documentation似乎有点稀疏,关于每个元素的工作方式,所以这里有:

我有一堆文件,我想迭代并为每个文件导出一个图。

df_all.head()

返回

    Dem-Dexc    Aem-Dexc    Aem-Aexc    S       E     fit     frame filename
0   18150.0595  18548.2451  15263.7451  0.7063  0.5054  0.879   1.0 Traces_exp22_tif_pair16.txt
1   596.9286    7161.7353   1652.8922   0.8244  0.9231  0.879   2.0 Traces_exp22_tif_pair16.txt
2   93.2976     3112.3725   2632.6667   0.5491  0.9709  0.879   3.0 Traces_exp22_tif_pair16.txt
3   1481.1310   4365.4902   769.3333    0.8837  0.7467  0.879   4.0 Traces_exp22_tif_pair16.txt
4   583.1786    6192.6373   1225.5392   0.8468  0.9139  0.879   5.0 Traces_exp22_tif_pair16.txt

现在我想分组和迭代:

for group in df_all.groupby("filename"):
    plot = sns.regplot(data = group, x = "Dem-Dexc", y = "frame")

但我得TypeError: tuple indices must be integers or slices, not str。为什么我会这样做?

1 个答案:

答案 0 :(得分:1)

我认为你需要改变:

for group in df_all.groupby("filename")

为:

for i, group in df_all.groupby("filename"):
    plot = sns.regplot(data = group, x = "Dem-Dexc", y = "frame")

解压缩tuples

或者按[1]选择元组的第二个值:

for group in df_all.groupby("filename"):
    plot = sns.regplot(data = group[1], x = "Dem-Dexc", y = "frame")

您可以通过以下方式检查tuple输出:

for group in df_all.groupby("filename"):
    print (group)

('Traces_exp22_tif_pair16.txt',      Dem-Dexc    Aem-Dexc    Aem-Aexc       S       E    fit  frame  \
0  18150.0595  18548.2451  15263.7451  0.7063  0.5054  0.879    1.0   
1    596.9286   7161.7353   1652.8922  0.8244  0.9231  0.879    2.0   
2     93.2976   3112.3725   2632.6667  0.5491  0.9709  0.879    3.0   
3   1481.1310   4365.4902    769.3333  0.8837  0.7467  0.879    4.0   
4    583.1786   6192.6373   1225.5392  0.8468  0.9139  0.879    5.0   

                      filename  
0  Traces_exp22_tif_pair16.txt  
1  Traces_exp22_tif_pair16.txt  
2  Traces_exp22_tif_pair16.txt  
3  Traces_exp22_tif_pair16.txt  
4  Traces_exp22_tif_pair16.txt  )

VS

for i, group in df_all.groupby("filename"):
    print (group)

     Dem-Dexc    Aem-Dexc    Aem-Aexc       S       E    fit  frame  \
0  18150.0595  18548.2451  15263.7451  0.7063  0.5054  0.879    1.0   
1    596.9286   7161.7353   1652.8922  0.8244  0.9231  0.879    2.0   
2     93.2976   3112.3725   2632.6667  0.5491  0.9709  0.879    3.0   
3   1481.1310   4365.4902    769.3333  0.8837  0.7467  0.879    4.0   
4    583.1786   6192.6373   1225.5392  0.8468  0.9139  0.879    5.0   

                      filename  
0  Traces_exp22_tif_pair16.txt  
1  Traces_exp22_tif_pair16.txt  
2  Traces_exp22_tif_pair16.txt  
3  Traces_exp22_tif_pair16.txt  
4  Traces_exp22_tif_pair16.txt  

如果想将输出保存到图片png

for i, group in df_all.groupby("filename"):
    plot = sns.regplot(data = group, x = "Dem-Dexc", y = "frame")
    fig = plot.get_figure()
    fig.savefig("{}.png".format(i.split('.')[0]))