读取目录CSV文件合并为DataFrame时遇FileNotFoundError求助
问题解决:读取data目录下CSV文件时的FileNotFoundError
核心原因
os.listdir('data/')返回的是仅文件名,不带所在目录路径。当你用pd.read_csv(filename)时,Python会在当前工作目录而非data/目录下查找文件,自然找不到目标文件。
修复方案
方案1:拼接完整文件路径(基础版)
使用os.path.join()将data/目录和文件名拼接成完整路径,确保读取路径正确:
import os import pandas as pd # 初始化空列表存储每个CSV的DataFrame(大量文件时更高效) df_list = [] data_dir = 'data/' for filename in os.listdir(data_dir): # 只处理CSV文件,避免读取非CSV文件报错 if filename.endswith('.csv'): # 拼接完整文件路径 full_path = os.path.join(data_dir, filename) df = pd.read_csv(full_path) df_list.append(df) # 一次性合并所有DataFrame,重置索引避免混乱 resultdf = pd.concat(df_list, ignore_index=True) print(resultdf.head())
方案2:用pathlib实现更简洁的路径处理(Python 3.4+)
pathlib是现代路径处理库,代码更直观简洁:
from pathlib import Path import pandas as pd df_list = [] data_dir = Path('data/') # 直接遍历目录下所有CSV文件,无需手动拼接路径 for csv_file in data_dir.glob('*.csv'): df = pd.read_csv(csv_file) df_list.append(df) resultdf = pd.concat(df_list, ignore_index=True)
额外优化说明
- 避免循环中反复合并:原代码每次循环都执行
concat,大量文件时效率极低。先将所有DataFrame存入列表,最后一次性合并,能大幅提升性能。 - 过滤非CSV文件:通过后缀判断或
glob匹配,避免误读目录下的其他文件导致报错。 - 重置索引:合并时添加
ignore_index=True,避免原文件索引重复或混乱。
内容的提问来源于stack exchange,提问作者Optimvs
相关产品推荐
相关产品推荐

