使用Python Pandas在多CSV文件中搜索字符串,代码无报错却生成空文件
问题原因
- 循环中每次直接覆盖变量
x,最终仅保留最后一个CSV文件的匹配结果,若最后一个文件无目标值匹配,输出的CSV自然为空 - 未对多个文件的匹配结果进行累加合并
修正代码
import pandas as pd import glob path = 'path/to/multiple/csv/files' # 初始化空DataFrame存储所有匹配结果 total_matches = pd.DataFrame() files = glob.glob(path + '/*.csv') for filename in files: df = pd.read_csv(filename, sep=',') # 筛选出任意列包含目标值的行 matched = df[df.apply(lambda row: row.astype(str).str.contains('myvalue').any(), axis=1)] # 将当前文件的匹配结果追加到总结果中 total_matches = pd.concat([total_matches, matched], ignore_index=True) # 保存最终结果 total_matches.to_csv('result.csv', index=False)
可选优化
- 如果目标值是数值类型,可去掉
astype(str),改用row.eq(目标数值).any(),提升运行效率 - 可添加来源文件列,方便后续溯源匹配结果的出处:
matched['来源文件'] = filename # 在追加到总结果前添加此行
内容的提问来源于stack exchange,提问作者Armageddon
相关产品推荐
相关产品推荐

