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

如何从扫描目录得到的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:06:05