Python,循环文件名的可变部分
我有一组非常类似的命令,它们都是这样的(df表示数据帧): 我想为它做一个循环,如下所示:Python,循环文件名的可变部分,python,dataframe,Python,Dataframe,我有一组非常类似的命令,它们都是这样的(df表示数据帧): 我想为它做一个循环,如下所示: for i in range(1,5): for j in range(1,5): df%i_part%j=... 当然,它对%不起作用。但我想这必须是一种简单的方法。 您能帮我吗?您可以尝试以下选项之一: 创建映射df的字典,并通过数据帧的名称访问它: 使用globals动态访问变量: 一种方法是在列表列表中收集数据帧并在该列表上迭代,而不是尝试动态解析python代码 df1_part1=... d
for i in range(1,5):
for j in range(1,5):
df%i_part%j=...
当然,它对%不起作用。但我想这必须是一种简单的方法。
您能帮我吗?您可以尝试以下选项之一:
globals
动态访问变量:一种方法是在列表列表中收集数据帧并在该列表上迭代,而不是尝试动态解析python代码
df1_part1=...
df1_part2=...
...
df1_part5=...
df2_part1=...
dflist = [[df1_part1, df1_part2, df1_part3, df1_part4, df1_part5],
[df2_part1, df2_part2, df2_part3, df2_part4, df2_part5]]
for df in dflist:
for df_part in df:
# do something with df_part
假设这个过程是数据准备的一部分,我想提一下,只要可能,您应该尝试使用“数据准备管道”。否则,代码在几个月后就会变得一团糟 有几种方法可以解决这个问题 字典是处理这个问题最直接的方法
df_零件={
'df1':{'part1':df1_part1,'part2':df1_part2,…,'partN':df1_partN},
'df2':{'part1':df1_part1,'part2':df1_part2,…,'partN':df2_partN},
“…”:{'part1':…\part1,'part2':…\part2,'partN':…\partN},
‘dfN’:{'part1':dfN_part1,'part2':dfN_part2,…,'partN':dfN_partN},
}
#从“dfN”打印零件`
对于df_零件['dfN']的val in。值()
打印(val)
#打印所有dfs的第1部分
对于df_parts.values()中的df:
打印(df['part1'])
#打印所有内容
对于df_零件中的df:
对于df_零件[df]中的val,值()
打印(val)
这种方法的好处是,您可以遍历整个字典,但不包括range
,以后可能会混淆。此外,最好将每个DFU部件直接分配给dict,而不是分配可能使用一次或两次的N*N
变量。在这种情况下,您只需使用1个变量,并在进行过程中重新分配:
#使用df1编码
df1=df_零件['df1']['partN']
#要做的事
#高兴吗?检查站
df_零件['df1']['partN']=df1
将数据帧分配给dict,而不是分配给变量。避免在不必要时使用全局变量,在我的情况下,全局变量的替代方案是什么?我无法定义文件列表,它太长了。我不仅有左边有数字的文件,右边还有更多。我仍然觉得奇怪的是,没有简单的解决方案。在SAS中,只需编写df%i_部分%j=。。。一切都很好。宏变量使之成为可能。有一个简单的解决方案:使用适当的数据结构,如字典,而不是使用globals
挖掘变量名的内部。我有一些命令,如verb_kd_top3_z=top3[top3.kd.isin(top3_zl_kd)==True]我不想手动创建所有文件的列表或字典。这个解决方案没有多大帮助。实际上,我在每个命令中都有许多地方,其中相同的数字是某个文件的一部分。列表列表会很长。需要编写很多代码,所以最后我不会节省任何时间。问题是,我有5种不同类型的文件名,其中包含数字,而不仅仅是df。。。所以我需要5本字典,然后我必须重写所有命令。简单地复制、粘贴和手动更改数字更容易。我可以更快地做到这一点。我同意问题在于“糟糕”的数据准备,但我不想这样做。但我还是要用它,我无权更改名称约定。
mapping = {"df1_part1": df1_part1, "df1_part2": df1_part2}
for i in range(1,5):
for j in range(1,5):
mapping[f"df{i}_part{j}"] = ...
df1_part1=...
df1_part2=...
...
df1_part5=...
df2_part1=...
for i in range(1,5):
for j in range(1,5):
globals()[f"df{i}_part{j}"] = ...
df1_part1=...
df1_part2=...
...
df1_part5=...
df2_part1=...
dflist = [[df1_part1, df1_part2, df1_part3, df1_part4, df1_part5],
[df2_part1, df2_part2, df2_part3, df2_part4, df2_part5]]
for df in dflist:
for df_part in df:
# do something with df_part