【问题标题】:Run a loop to generate variable names in Python [duplicate]运行循环以在 Python 中生成变量名 [重复]
【发布时间】:2026-02-15 04:15:01
【问题描述】:

我正在尝试导入具有以下文件名(phone1、phone2 等)的数据集

df1 = pd.read_csv(r'C:\Users\...\phone1.csv')
df2 = pd.read_csv(r'C:\Users\...\phone2.csv')
df3 = pd.read_csv(r'C:\Users\...\phone3.csv')
df4 = pd.read_csv(r'C:\Users\...\phone4.csv')
df5 = pd.read_csv(r'C:\Users\...\phone5.csv')
df6 = pd.read_csv(r'C:\Users\...\phone6.csv')

我尝试了以下代码

for i in range(1, 7):
    'df'+i = pd.read_csv(r'C:\Users\siddhn\Desktop\phone'+str(i)+'.csv', engine = 'python')

但我收到一条错误消息,提示 无法分配给操作员

如何使用循环导入数据集?

【问题讨论】:

  • 不要那样做。相反,创建一个列表dfs = [] 并使用dfs.append( pd.read_csv(...) )。现在,您可以使用dfs[0] 专门指代其中之一,但您可以使用for df in dfs: 轻松循环它们。
  • 正如@TimRoberts 提到的,您可以将DataFrames 存储在列表中,但如果您的DataFrames 必须具有特定名称,那么在循环中使用dict 也是可能的。可以做类似的事情(在你的 for 循环内): dfs[f"df_{i}"] = pd.read_csv(...)

标签: python pandas dataframe loops


【解决方案1】:

正如@TimRoberts 提到的,您应该使用listdict 来存储您的数据帧,但如果您真的想要变量df1df2、...、df6,您可以使用locals()globals()

for i in range(1, 7):
    locals()[f'df{i}'] = pd.read_csv(fr'C:\Users\siddhn\Desktop\phone{i}.csv')

print(df1)
print(df2)

【讨论】:

  • 虽然使用locals() 可能会解决您的问题,但它会使您的代码混乱且难以理解。
  • @Vishnudev。我完全同意你的看法
【解决方案2】:

使用内置的glob

from glob import glob

fullpath = f'C:\Users\siddhn\Desktop\phone[1-6].csv'
dfs = [pd.read_csv(file) for file in glob(fullpath)]

print(dfs[0])

【讨论】:

    【解决方案3】:

    你可以将它存储在一个列表中,这是这个想法

    var = []
    for i in range(1, 7):
        var.append(i)
    
    print(var[0])
    print(var[2])
    

    您可以从列表中使用他们的键访问该值。

    【讨论】:

      【解决方案4】:

      'df'+i 返回一个左值,即可以分配给其他变量但不能存储某些内容。 喜欢使用

      for i in range(1, 7):
          'df'+i = pd.read_csv(r'C:\Users\siddhn\Desktop\phone'+str(i)+'.csv', engine = 'python')
      

      创建一个 data_frames 列表作为 df = [] 现在将您的 data_frames 附加为

      for i in range(7):
         df.append(pd.read_csv(r'C:\Users\siddhn\Desktop\phone'+str(i)+'.csv', engine = 'python')
      

      然后,您可以通过像 df[0]df[1]..... 那样对它们进行索引来访问 data_frames。

      【讨论】:

        【解决方案5】:

        您可以创建一个数据框列表,然后对其进行迭代或按索引访问。

        df_list = [pd.read_csv(r'C:\Users\siddhn\Desktop\phone'+str(i)+'.csv', engine = 'python') for i in range(1, 7)]
        df_list[1]
        

        变量不能是运算符,这就是您收到错误的原因。

        【讨论】: