我想创建一个创建 3 个数据帧的函数,然后取三个数据帧的元素平均。数据帧是使用先前步骤中定义的字典从循环生成的,如下所示:
# extracting and organizing data
def density_dataP(filenames):
datasets = ["df_1", "df_2", "df_3"]
for num in filenames:
for index in range(len(datasets)):
datasets[index] = pd.DataFrame({
#excluding the edges b/c nothing interesting happens there
"z-coordinate (nm)": mda.auxiliary.XVG.XVGReader(filenames[num]["water"])._auxdata_values[7:43:1,0],
"water": mda.auxiliary.XVG.XVGReader(filenames[num]["water"])._auxdata_values[7:43:1,1],
"acyl": mda.auxiliary.XVG.XVGReader(filenames[num]["acyl"])._auxdata_values[7:43:1,1],
"headgroups": mda.auxiliary.XVG.XVGReader(filenames[num]["head"])._auxdata_values[7:43:1,1],
"ester": mda.auxiliary.XVG.XVGReader(filenames[num]["ester"])._auxdata_values[7:43:1,1],
"protein": mda.auxiliary.XVG.XVGReader(filenames[num]["proa"])._auxdata_values[7:43:1,1]
})
master_data = (df_1 + df_2 + df_3)/3
return master_data
但是,当我尝试使用有效输入运行该函数时,出现以下错误:
---> 16 master_data = (df_1 + df_2 + df_3)/3
17 return master_data
NameError: name 'df_1' is not defined
XVGReader 方法的输入需要输入的 XVG 文件的路径,我在字典中包含这些路径。字典的第一层有一个数字,第二层有文件的路径。每个数字都与三个数据帧之一中的所有路径相关联。(即键 1 中的所有路径都用于 df_1 等)我使用的字典大致如下所示:
{1: {'water': $PATH_TO_water1.xvg', 'acyl': $PATH_TO_acyl1.xvg', 'head': $PATH_TO_head1.xvg', 'ester': $PATH_TO_ester1.xvg', 'proa': $PATH_TO_proa1 .xvg'},
2: {'water': $PATH_TO_water2.xvg', 'acyl': $PATH_TO_acyl2.xvg', 'head': $PATH_TO_head2.xvg', 'ester': $PATH_TO_ester2.xvg', 'proa': $PATH_TO_proa2。 xvg'},
3: {'water': $PATH_TO_water3.xvg', 'acyl': $PATH_TO_acyl3.xvg', 'head': $PATH_TO_head3.xvg', 'ester': $PATH_TO_ester3.xvg', 'proa': $PATH_TO_proa3。 xvg'}}
如何让 python 识别在此循环中创建的 DataFrames 或至少获得 master_data 的最终结果?
在您的示例中, "df_1" 是 list 中的字符串datasets
,而不是变量。如果您想按名称访问,那么您将希望datasets
成为一个键为df_1
等的字典,值为数据框。
但是您不需要在这里命名项目,因为您只需要一个平均值。所以我认为你应该简化这个功能。例如,内部循环datasets
似乎创建了相同值的三个副本;好像可以省略。此外,如果文件名是一个dict
,其中每个值都是一个数据帧,那么您可以直接迭代这些值。
def density_dataP(filenames):
datasets = []
for df in filenames.values():
datasets.append(pd.DataFrame({
"z-coordinate (nm)": mda.auxiliary.XVG.XVGReader(df["water"])._auxdata_values[7:43:1,0],
"water": mda.auxiliary.XVG.XVGReader(df["water"])._auxdata_values[7:43:1,1],
"acyl": mda.auxiliary.XVG.XVGReader(df["acyl"])._auxdata_values[7:43:1,1],
"headgroups": mda.auxiliary.XVG.XVGReader(df["head"])._auxdata_values[7:43:1,1],
"ester": mda.auxiliary.XVG.XVGReader(df["ester"])._auxdata_values[7:43:1,1],
"protein": mda.auxiliary.XVG.XVGReader(df["proa"])._auxdata_values[7:43:1,1]
})
return pd.concat([datasets]).mean()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句