如何在Python中动态引用for循环中的数据帧
我对python非常陌生,这可能是一个简单的问题,但我似乎找不到解决方案 我有几个熊猫数据框,名称如下: 输出1,输出2,…,输出n 我想对它们的长度(如行数)求和,我得出如下结论:如何在Python中动态引用for循环中的数据帧,python,for-loop,dynamic,reference,pandas,Python,For Loop,Dynamic,Reference,Pandas,我对python非常陌生,这可能是一个简单的问题,但我似乎找不到解决方案 我有几个熊猫数据框,名称如下: 输出1,输出2,…,输出n 我想对它们的长度(如行数)求和,我得出如下结论: sum =0 for num in range(1,n): nameframe="output_"+str(num) sum+=nameframe.shape[0] 问题是Python将nameframe视为字符串,而不是数据帧的名称 环顾四周,我发现了一个潜在的解决方案: sum =0 for
sum =0
for num in range(1,n):
nameframe="output_"+str(num)
sum+=nameframe.shape[0]
问题是Python将nameframe视为字符串,而不是数据帧的名称
环顾四周,我发现了一个潜在的解决方案:
sum =0
for num in range(1,n):
x = globals()["output_urls_%s" % num]
sum+=x.shape[0]
这似乎是可行的,但是globals()的使用似乎非常令人沮丧。
因此,要达到我的目的,最适合的方式是什么?最适合的方式可能是将数据帧存储在列表中。例如:
dfs = [output_1, output_2, ...]
df_length = sum(x.shape[0] for x in dfs)
或者,您可以考虑将数据存储在组合数据结构中,假设它们都以某种方式相关。例如,如果每个数据帧是不同的组,则可以在组合帧上设置多索引,如
df = pd.concat([output_1, output_2, ...], keys=['group_a', 'group_b', ..])
然后,您可以只计算组合帧的长度。您处于一个混乱的状态,需要大量的工作,因为您一开始没有遵守标准。不要手动创建所有数据帧并给它们类似于df_id的名称,而是在循环中创建它们并将它们粘贴到列表中。你可以在循环中使用
nameframe=eval(“output”+str(num))
,但我同意@FooBar的观点,你应该在创建时将它们存储为列表,或者如果你想保留名称,请使用字典。好的,谢谢。我确实在列表中插入了数据帧。它更整洁,更容易访问。您的第二行可以简化为df_length=sum(len(x)表示dfs中的x)
谢谢,正如整个评论中所建议的,将数据帧存储在列表中是最好的解决方案。