You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Pandas 循环中如何按指定列表元素为合并后的DataFrame命名

报错核心原因
  • 你当前的代码存在三个明确的逻辑问题,直接运行必然出错:
    • 循环枚举的变量filepathlist根本没有定义,你实际定义的路径列表叫path,变量名不匹配会直接触发未定义报错
    • 路径拼接时没有使用当前循环指向的单个目录,反而把整个path列表传给os.path.join,生成的文件路径完全无效,根本匹配不到CSV文件
    • 你写的dfnames[idx] = 合并后的DataFrame,本质只是把dfnames列表里对应位置的字符串值替换成了DataFrame对象,完全没有生成和字符串同名的独立变量,和你的预期不符
标准实现方案

不推荐硬生成零散的独立全局变量来存DataFrame,用字典做名称-对象的映射管理是Python处理这类场景的通用做法,可维护性远高于动态生成变量:

  1. 初始化空字典,存储自定义名称与对应合并后DataFrame的映射关系
  2. 同步遍历路径列表和对应的自定义名称列表,逐目录完成CSV读取、合并操作
  3. 后续需要使用某个DataFrame时,直接通过字典的键名取值即可

示例代码:

import os
import glob
import pandas as pd

# 你的原始定义
path = ['users/documents', 'users/desktop']
dfnames = ['ABCDocuments', 'ABCFiles']

# 初始化映射字典
df_map = {}

# 同步遍历路径与对应命名
for target_path, df_label in zip(path, dfnames):
    # 匹配当前目录下所有csv文件
    csv_files = glob.glob(os.path.join(target_path, '*.csv'))
    df_buffer = []
    for csv_file in csv_files:
        df_buffer.append(pd.read_csv(csv_file))
    # 合并当前目录下的所有csv
    merged_df = pd.concat(df_buffer, ignore_index=True)
    # 存入字典建立映射
    df_map[df_label] = merged_df

# 后续使用示例:要获取ABCDocuments对应的df,直接取值
# your_target_df = df_map['ABCDocuments']

如果你确实有特殊需求,必须生成与字符串同名的独立全局变量(仅说明方法,不推荐使用),可以借助Python内置的全局变量字典实现:

  • 在循环内把存入字典的代码替换为 globals()[df_label] = merged_df,就会在全局空间生成名为df_label对应字符串的独立变量
  • 风险说明:这种写法会让循环生成的变量散落在全局命名空间中,极易和其他代码的同名变量冲突,后续调试时很难追溯变量来源,排查问题成本极高,非必要不要使用

内容的提问来源于stack exchange,提问作者SOK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 00:15:03