如何在Python中动态引用for循环中的数据帧

如何在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

我对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 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)
谢谢,正如整个评论中所建议的,将数据帧存储在列表中是最好的解决方案。