多CSV文件过滤失败行至新CSV的简便方法及脚本报错求助
问题修复与优化方案
原脚本存在的核心问题
- 变量名不一致:定义的文件列表变量是
csvfiles,但循环遍历错误使用了csv_files,导致"csv_files未定义"报错。 - 缩进与逻辑错误:过滤数据的代码缩进位置错误,且
dataframes是列表类型,不能直接使用DataFrame的索引语法筛选数据。 - 路径格式错误:Windows路径中的反斜杠未转义,
'C:\Users\''会被解析为无效路径,需用双反斜杠或原始字符串处理。 - 冗余导入:重复导入
csv库,且导入了未使用的sqlite3.Row模块。 - 低效逻辑:先加载所有文件数据再过滤,不如单文件读取后立即过滤,减少内存占用。
修正后的完整代码
# 功能:读取目录下所有CSV文件,筛选result列为'fail'的行并写入新CSV import pandas as pd import os import glob # CSV文件目录路径(用原始字符串避免转义问题) mycsvdir = r'C:\Users\' # 获取目录下所有CSV文件路径 csvfiles = glob.glob(os.path.join(mycsvdir, '*.csv')) # 存储所有过滤后的行 filtered_dfs = [] # 遍历每个CSV文件 for csvfile in csvfiles: # 读取单个CSV文件 df = pd.read_csv(csvfile) # 筛选result列为'fail'的行(忽略大小写可选:case=False) fail_rows = df[df['result'] == 'fail'] # 将筛选结果加入列表 filtered_dfs.append(fail_rows) # 合并所有筛选后的DataFrame final_df = pd.concat(filtered_dfs, ignore_index=True) # 写入新CSV文件 final_df.to_csv('ROI_Fail.csv', index=False)
关键优化说明
- 路径处理:用原始字符串
r'C:\Users\'避免Windows路径的转义错误。 - 即时过滤:读取单个文件后立即筛选目标行,避免加载全量数据占用过多内存。
- 合并数据:用
pd.concat合并所有筛选后的DataFrame,ignore_index=True重置索引避免重复。 - 写入优化:
index=False避免将DataFrame的索引写入CSV文件。
内容的提问来源于stack exchange,提问作者Alfredo Portillo
相关产品推荐
相关产品推荐

