如何从扫描目录得到的CSV文件列表动态生成对应命名的Pandas DataFrame
问题核心说明
你当前代码的问题在于最后循环中直接对filename变量重复赋值,只会保留最后一个读取的CSV内容,无法生成独立的、以文件名命名的DataFrame。以下是可直接使用的实现方案:
方案1:字典存储所有DataFrame(推荐)
这是Python处理这类需求的最佳实践,不会污染全局变量,也方便后续批量处理所有CSV数据:
import os import glob import pandas as pd # 路径前加r前缀标识为原始字符串,避免Windows路径转义问题 PATH = r"Z:\Adam" EXT = "*.csv" all_csv_files = [file for path, subdir, files in os.walk(PATH) for file in glob.glob(os.path.join(path, EXT))] df_csv_path = pd.DataFrame(all_csv_files, columns =['Path']) # 用os.sep代替硬编码的\\,兼容不同操作系统的路径格式 df_split_path = df_csv_path['Path'].str.split(os.sep, n = -1, expand = True) df_split_path = df_split_path.rename(columns = {0:'Drive',1:'Main',2:'Project',3:'Imaging Folder', 4:'Experimental Group',5:'Experimental Rep',6:'File Name'}) df_csv_info = df_split_path.join(df_csv_path['Path']) # 字典的key为去掉后缀的文件名,value为对应CSV的DataFrame csv_df_dict = {} for index, row in df_csv_info.iterrows(): df_key = row['File Name'].removesuffix('.csv') csv_df_dict[df_key] = pd.read_csv(row['Path'])
使用示例:如果原文件名为exp_group1_rep3.csv,只需通过csv_df_dict['exp_group1_rep3']即可调用对应DataFrame。
方案2:动态生成独立变量(不推荐)
如果确实需要直接通过文件名作为变量名访问DataFrame,可以通过修改全局变量字典实现:
for index, row in df_csv_info.iterrows(): df_name = row['File Name'].removesuffix('.csv') globals()[df_name] = pd.read_csv(row['Path'])
执行完成后可直接通过文件名(去掉.csv后缀)作为变量名调用对应DataFrame,比如exp_group1_rep3。但该方式会生成大量零散全局变量,维护难度高,更推荐使用方案1。
原有代码优化点说明
- 缺少
os、glob、pandas的导入语句,运行前需补充 - Windows路径加
r前缀避免转义字符识别异常 - 遍历DataFrame用
iterrows()方法更简洁,无需单独通过索引取值
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

