Python 索引器:单个位置索引器超出范围

Python 索引器:单个位置索引器超出范围,python,pandas,dataframe,ggplot2,Python,Pandas,Dataframe,Ggplot2,我有这样一个数据帧: df ID val1 Param val2 0 0.0000 -0.7110 'A' 2.5 1 0.0000 -0.7285 'A' 2.0 2 0.0000 -0.4867 'B' 2.3 3 0.0000 -0.5729 'C' 2.2 ... 91296 0

我有这样一个数据帧:

df
           ID           val1     Param  val2   
0        0.0000        -0.7110  'A'   2.5 
1        0.0000        -0.7285  'A'   2.0 
2        0.0000        -0.4867  'B'   2.3 
3        0.0000        -0.5729  'C'   2.2 ...   
91296    0.0485         0.0733  'Y'   2.1 
91297    0.0485        -0.2035  'Y'   2.24 
91298    0.0485        -0.0479  'Z'   2.5 
我正在尝试运行一个循环,其中我为每个id+参数打印一个绘图 添加到列表中,然后将绘图保存到中与其关联的文件夹中 目录

期望的:


p=[]
测试=测试中所有ID的df.groupby(ID):
对于所有唯一参数:
p、 追加(根据id和相关参数创建绘图)

这是期望的输出:

文件夹(0.0000)

文件夹(0.0485)

这就是我到目前为止所做的:

final_gr = df.groupby('ID') for j in final_gr.groups:
     df_slice = df[df['ID'] == j]
     p.append(ggplot(aes('val1','val2'), data = df_slice) + \
     geom_point(color='c') + ggtitle(element_text(text='Val1 vs %s\nat ID:
 %s'%(str(df_slice.Param.unique())[2:-2],str(df_slice.ID.unique())),size=15,face='bold'))
 + \
     theme_bw() + scale_y_continuous(name='%s'%str(df_slice.Param.unique())))
     for img in p:
         img.save(r'\DIRECTORY\%s\%s.png'%(str(df_slice.ID.unique())[2:-2],df_slice.Param.unique()))

我认为您可能混淆了一些核心python格式。你可能在找更像这样的东西

import os
for key, group in df.groupby(by='ID'):
    p.append(ggplot(aes('val1','val2'), data = group) + \ 
    geom_point(color='c') + ggtitle(element_text(text='Val1 vs %s\nat ID:
    %s'%(str(group.Param.unique())
    [2:-2],str(key)),size=15,face='bold'))
    + \
    theme_bw() + scale_y_continuous(name='%s'%str(group.Param.unique())))
    for img in p:
        os.mkdir(r'\DIRECTORY\%s'%key)
        img.save(r'\DIRECTORY\%s\%s.png'(str(key[2:-2],df_slice.Param.unique()))
请注意,您可能希望创建要写入的目录,因为如果该目录不存在,则不会自动为您创建该目录。(见os.mkdir)

我建议您首先使用一个简单的循环检查键,分组循环结果,如下所示:

for key, group in df.groupby(by='ID'):
    print key

for key, group in df.groupby(by='ID'):
    print group

我认为您可能混淆了一些核心python格式。你可能在找更像这样的东西

import os
for key, group in df.groupby(by='ID'):
    p.append(ggplot(aes('val1','val2'), data = group) + \ 
    geom_point(color='c') + ggtitle(element_text(text='Val1 vs %s\nat ID:
    %s'%(str(group.Param.unique())
    [2:-2],str(key)),size=15,face='bold'))
    + \
    theme_bw() + scale_y_continuous(name='%s'%str(group.Param.unique())))
    for img in p:
        os.mkdir(r'\DIRECTORY\%s'%key)
        img.save(r'\DIRECTORY\%s\%s.png'(str(key[2:-2],df_slice.Param.unique()))
请注意,您可能希望创建要写入的目录,因为如果该目录不存在,则不会自动为您创建该目录。(见os.mkdir)

我建议您首先使用一个简单的循环检查键,分组循环结果,如下所示:

for key, group in df.groupby(by='ID'):
    print key

for key, group in df.groupby(by='ID'):
    print group

修好了。刚刚在jfbeltran的代码中又添加了三行代码,我首先(在上一步的外部)将参数名称按ID提取到各自的文本文件中,按ID检查该参数是否在文本文件中,然后创建了一个具有匹配参数和ID的新数据框:

for key, group in df.groupby(by='ID'):
for g in group.Param.unique():
    if g in open('%s.txt'%str(key)).read():
        df_slice = group[(group['ID'] == key) & (group['Param'] == g)]
        p.append(ggplot(aes('Val1','Val2'), data = df_slice) + \
        geom_point(color='c') + ggtitle(element_text(text='Val1 vs %s\nat ID:%s'%(str(g),
        str(key)),size=15,face='bold'))+ \
        theme_bw() + scale_y_continuous(name='%s'%str(g)))
        for img in p:
            #os.mkdir(r'DIRECTORY\%s'%key)
            img.save(r'DIRECTORY\%s\%s.png'%(str(key),str(g)))

修好了。刚刚在jfbeltran的代码中又添加了三行代码,我首先(在上一步的外部)将参数名称按ID提取到各自的文本文件中,按ID检查该参数是否在文本文件中,然后创建了一个具有匹配参数和ID的新数据框:

for key, group in df.groupby(by='ID'):
for g in group.Param.unique():
    if g in open('%s.txt'%str(key)).read():
        df_slice = group[(group['ID'] == key) & (group['Param'] == g)]
        p.append(ggplot(aes('Val1','Val2'), data = df_slice) + \
        geom_point(color='c') + ggtitle(element_text(text='Val1 vs %s\nat ID:%s'%(str(g),
        str(key)),size=15,face='bold'))+ \
        theme_bw() + scale_y_continuous(name='%s'%str(g)))
        for img in p:
            #os.mkdir(r'DIRECTORY\%s'%key)
            img.save(r'DIRECTORY\%s\%s.png'%(str(key),str(g)))

仍然遇到错误:没有这样的文件或目录:“C:\\directory\\0.0000\['A'\n'B'\n'C'\n….png]。我尝试添加另一个for循环,如:'for g in group.Param.unique()'就在您提供的第一个for循环之后,这会有点效果,但它为每个参数名输出完全相同的绘图。它们都应该不同,并按组ID进行绘图。修复了它。只需在代码中再添加三行,其中我是第一行(在上一步中为外部)按ID将参数名称提取到各自的文本文件中,按ID检查该参数是否在文本文件中,然后创建一个具有匹配参数和ID的新数据框:对于键,group in complete.groupby(by='ID'):对于group中的g.Param.unique():如果g处于打开状态('%s.txt'%str(key))。read():df_slice=group[(group['ID']=key)&(组['Param']==g)]仍遇到错误:没有这样的文件或目录:“C:\\directory\\0.0000\['A'\n'B'\n'C'\n….png]。我尝试在您提供的第一个for循环之后添加另一个for循环,如:“group.Param.unique()”中的for g,这会有点效果,但它为每个参数名输出完全相同的绘图。它们都应该是不同的,并按组ID绘制。已修复。刚才在代码中又添加了三行代码,我首先(在上一步的外部)将参数名称按ID提取到各自的文本文件中,按ID检查该参数是否在文本文件中,然后创建了一个新的数据框,该数据框具有匹配的参数和ID:for key,group in complete.groupby(by='ID'):for g in group.Param.unique():如果g处于打开状态(“%s.txt”%str(key)).read():df_slice=group[(group['ID']==key)&(group['Param']==g)]