如何循环工作区中的所有数据帧?

2024-09-30 05:28:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望能够遍历当前工作区中的所有数据帧(而不是名称!)

为了获得所有数据帧的列表,我找到了以下解决方案here

import pandas as pd

# create dummy dataframes
df1 = pd.DataFrame({'Col1' : list(range(100))})
df2 = pd.DataFrame({'Col1' : list(range(100))})

# check whether all variables in scope are pandas dataframe. 
# Dir() will return a list of string representations of the variables. 
# Simply evaluate and test whether they are pandas dataframes
alldfs = [var for var in dir() if isinstance(eval(var), pd.core.frame.DataFrame)]

print(alldfs) # df1, df2

这是如上所述的,但问题是我希望能够使用此列表来迭代实际数据帧,而不是数据帧的名称

以下代码返回数据帧名称的长度,但应返回数据帧的长度(行数):

for df in alldfs:
    print(len(df))

它应返回:

100
100

它返回:

3
3

我怎样才能解决这个问题


Tags: 数据in名称dataframepandas列表varrange
2条回答

您需要在列表的元素上使用eval,因为这些是数据帧变量的名称。i、 e:

for df in alldfs:
    print(len(eval(df)))

这将产生您想要的输出dict

import pandas as pd

df1 = pd.DataFrame({'Col1' : list(range(100))})
df2 = pd.DataFrame({'Col1' : list(range(100))})

alldfs = {key: value for key, value in locals().items() if isinstance(value, pd.core.frame.DataFrame)}

#or using your method

alldfs = {var: eval(var) for var in dir() if isinstance(eval(var), pd.core.frame.DataFrame)}

print(alldfs) 

for df in alldfs.values():
    print(len(df))

输出:

{'df1':     Col1
0      0
1      1
2      2
3      3
4      4
..   ...
95    95
96    96
97    97
98    98
99    99

[100 rows x 1 columns], 'df2':     Col1
0      0
1      1
2      2
3      3
4      4
..   ...
95    95
96    96
97    97
98    98
99    99

[100 rows x 1 columns]}
100
100

相关问题 更多 >

    热门问题