【问题标题】:Copy/assign a Pandas dataframe based on their name in a for loop在 for 循环中根据名称复制/分配 Pandas 数据框
【发布时间】:2021-10-07 16:11:07
【问题描述】:

我对 python 比较陌生 - 我正在努力做以下事情:

我有一组不同的数据框,具有顺序命名 (df_i),我想根据它们的名称(使用字符串)在 for 循环中访问它们,我该怎么做?例如

df_1 = pd.read_csv('...')
df_2 = pd.read_csv('...')
df_3 = pd.read_csv('...')
....

n_df = 3
for i in range(len(n_df)):
    df_namestr= 'df_' + str(i+1)
    # --------------------- 
    df_temp = df_namestr 
    # --------------------- 
    # Operate with df_temp. For i+1= 1, df_temp should be df_1 

亲切的问候,

DF

【问题讨论】:

    标签: pandas string dataframe loops


    【解决方案1】:

    你可以试试这样的:

    for n in range(1, n_df+1):
        df_namestr = f"df_{n}"
        df_tmp = locals().get(df_namestr)
        if not isinstance(df_tmp, pd.DataFrame):
            continue
        print(df_namestr)
        print(df_tmp)
    

    请参阅locals() 的文档以了解更多信息。

    【讨论】:

    • 这几乎正是我正在寻找的!谢谢@Corralien。但是数据框名称比我给出的示例要复杂一些,我想在 locals() 函数之外创建字符串。但是,如果我在循环中定义一个名为“df_name”的字符串,我如何在 locals().get(??) 中使用它。 ` for n in range(1, n_df+1): df_name = 'df'+str(i) df_tmp = locals().get(f"df_name") if not isinstance(df_tmp, pd.DataFrame): continue print( df_tmp) `
    • 我更新了我的答案。是你现在所期待的吗?
    • 没错!谢谢:D
    • 你好@Corralien。这段代码df_tmp = locals().get(df_namestr) 在函数中不起作用有什么原因吗?
    • 是的,这是有充分理由的。 locals() 是引用当前范围(您的函数)中的局部符号的字典,但是您的数据框变量未在您的函数中声明。您必须将 locals() 替换为 globals()
    【解决方案2】:

    通过将多个数据帧读入列表来访问它们会更好吗?

    您可以将所需的所有 csv 文件放在一个子文件夹中并全部读取。然后它们会出现在一个列表中,您可以将每个文件作为该列表中的一个项目进行访问。

    示例:

    import pandas as pd
    import glob
    
    path = r'/Users/myUsername/Documents/subFolder'
    csv_files = glob.glob(path + "/*.csv")
    
    dfs = []
    
    for filename in csv_files:
        df = pd.read_csv(filename)
        dfs.append(df)
    
    print(len(dfs))
    
    print(dfs[1].head())
    

    【讨论】:

      猜你喜欢
      • 2011-07-21
      • 1970-01-01
      • 2022-12-20
      • 1970-01-01
      • 1970-01-01
      • 2019-07-08
      • 1970-01-01
      • 2011-11-22
      • 1970-01-01
      相关资源
      最近更新 更多