如何快速从文件夹读取指定CSV并以文件名命名DataFrame
高效批量读取指定CSV文件并生成对应名称的DataFrame
原代码问题分析
你之前的代码无法运行主要有几个问题:
- 未定义
col_names变量,且循环中误用了col_name[i](少了复数后缀s) - 直接用字符串拼接路径容易出错,比如路径末尾没有斜杠时会导致文件路径格式错误
- 通过索引循环创建变量的方式既不高效也不利于后续管理
推荐解决方案:用字典存储DataFrame(高效且易管理)
用字典存储是最优方案,键对应文件名(去掉.csv后缀),值对应读取后的DataFrame,既方便批量操作,也避免了大量独立变量导致的混乱。
import pandas as pd from pathlib import Path # 替换为你的实际文件夹路径 folder_path = Path("...") # 指定需要读取的目标文件列表 target_files = ['a.csv', 'b.csv', 'c.csv', 'd.csv', 'e.csv'] # 初始化字典存储DataFrame df_dict = {} for file in target_files: # 用Path自动处理路径分隔符,避免拼接错误 file_full_path = folder_path / file # 文件名去掉后缀作为字典的键 df_name = file.rstrip('.csv') df_dict[df_name] = pd.read_csv(file_full_path)
使用时直接通过字典键访问对应DataFrame,比如df_dict['a']就能获取a.csv的数据。
若需生成独立全局变量(不推荐)
如果确实需要将每个DataFrame作为独立变量使用,可以借助globals()函数,但注意文件名不能包含空格、特殊字符等不符合变量命名规则的内容:
import pandas as pd from pathlib import Path folder_path = Path("...") target_files = ['a.csv', 'b.csv', 'c.csv', 'd.csv', 'e.csv'] for file in target_files: file_full_path = folder_path / file df_name = file.rstrip('.csv') # 将DataFrame注册为全局变量 globals()[df_name] = pd.read_csv(file_full_path)
之后直接用a、b等变量即可访问对应DataFrame。
进一步提升读取效率
如果目标CSV文件较多或单个文件较大,可以用多线程并行读取(IO密集型任务适合并行):
import pandas as pd from pathlib import Path from concurrent.futures import ThreadPoolExecutor folder_path = Path("...") target_files = ['a.csv', 'b.csv', 'c.csv', 'd.csv', 'e.csv'] # 定义单个文件读取函数 def load_csv(file): file_path = folder_path / file return file.rstrip('.csv'), pd.read_csv(file_path) # 线程池并行读取 df_dict = {} with ThreadPoolExecutor() as executor: # 批量提交任务并获取结果 for df_name, df in executor.map(load_csv, target_files): df_dict[df_name] = df
并行读取能大幅缩短IO等待时间,适合处理大量文件的场景。
内容的提问来源于stack exchange,提问作者Data-7scientist
相关产品推荐
相关产品推荐

