Python Pandas 循环中如何按指定列表元素为合并后的DataFrame命名
报错核心原因
- 你当前的代码存在三个明确的逻辑问题,直接运行必然出错:
- 循环枚举的变量
filepathlist根本没有定义,你实际定义的路径列表叫path,变量名不匹配会直接触发未定义报错 - 路径拼接时没有使用当前循环指向的单个目录,反而把整个
path列表传给os.path.join,生成的文件路径完全无效,根本匹配不到CSV文件 - 你写的
dfnames[idx] = 合并后的DataFrame,本质只是把dfnames列表里对应位置的字符串值替换成了DataFrame对象,完全没有生成和字符串同名的独立变量,和你的预期不符
- 循环枚举的变量
标准实现方案
不推荐硬生成零散的独立全局变量来存DataFrame,用字典做名称-对象的映射管理是Python处理这类场景的通用做法,可维护性远高于动态生成变量:
- 初始化空字典,存储自定义名称与对应合并后DataFrame的映射关系
- 同步遍历路径列表和对应的自定义名称列表,逐目录完成CSV读取、合并操作
- 后续需要使用某个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
相关产品推荐
相关产品推荐

