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

时间:2014-08-25 12:53:55

标签: python for-loop dynamic reference pandas

我是python的新手,它可能是一个简单的问题,但我似乎无法找到解决方案。

我有几个pandas数据框,名称如下: output_1,output_2,...,output_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()似乎非常气馁。 因此,达到我目的的最pythonic方式是什么?

1 个答案:

答案 0 :(得分:2)

最pythonic方式可能是将数据帧存储在列表中。如,

dfs = [output_1, output_2, ...]
df_length = sum(x.shape[0] for x in dfs)

或者,您可以考虑将数据存储在组合的pandas数据结构中,假设它们都以某种方式相关。例如,如果每个数据帧是不同的组,您可以在组合帧上设置MultiIndex,例如

df = pd.concat([output_1, output_2, ...], keys=['group_a', 'group_b', ..]) 

然后你可以只取合并帧的长度。