【问题标题】:How can I loop over all Pandas Data Frames in the workspace?如何遍历工作区中的所有 Pandas 数据框?
【发布时间】:2020-08-09 13:47:51
【问题描述】:

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

为了获得所有数据框的列表,我找到了以下解决方案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

我该如何解决这个问题?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    这将产生您想要的输出为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
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • eval is evil,不鼓励使用它。更好的选择是基于@adnanmuttaleb 推荐的dict
      • 好的,谢谢。以后会牢记这一点!
      猜你喜欢
      • 2011-11-04
      • 2022-09-24
      • 2016-04-25
      • 2017-10-05
      • 1970-01-01
      • 2018-09-26
      • 1970-01-01
      • 2021-01-05
      • 1970-01-01
      相关资源
      最近更新 更多