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)]