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

如何用Python基于txt列表高效过滤csv/txt/Excel文件数据

高效数据筛选实现方案

核心优化逻辑:放弃原生Python逐行逐列循环匹配的思路,先把txt存储的目标样本名转为**集合(set)**结构(成员判断时间复杂度为O(1)),再用pandas的矢量化操作完成批量筛选,整体时间复杂度从逐循环的O(n*m)降到O(n+m),数据量越大性能优势越明显,十万级行数据基本可以做到毫秒级返回结果。

前置依赖安装

执行以下命令安装需要的第三方库:
pip install pandas openpyxl

注:处理csv/txt格式数据不需要openpyxl依赖,仅读取xlsx格式Excel文件时需要用到。

通用实现代码(适配绝大多数场景)

  • 先读取txt中的目标样本名,自动去重、跳过空行
  • 一次性加载原始数据文件(Excel/csv/txt均支持)
  • 用矢量化布尔索引直接筛选匹配的样本数据
  • 导出筛选后的结果文件
import pandas as pd

# 读取目标样本名列表,txt要求每行存一个Sample_name
with open("target_sample_list.txt", "r", encoding="utf-8") as f:
    target_samples = {line.strip() for line in f if line.strip()}

# 读取原始数据,根据自己的文件格式二选一即可
# 读取Excel xlsx格式
raw_df = pd.read_excel("raw_data.xlsx", dtype={"Sample_name": str})
# 读取csv格式
# raw_df = pd.read_csv("raw_data.csv", dtype={"Sample_name": str})

# 筛选匹配数据:Sample_name为行标识(每行对应一个样本)时用这行
filtered_df = raw_df[raw_df["Sample_name"].isin(target_samples)]

# 如果你的实际场景是Sample_name为列名(每列对应一个样本),把上面筛选行替换成下面的筛列代码即可
# filtered_df = raw_df.loc[:, raw_df.columns.isin(target_samples | {"Sample_name"})]

# 导出结果,根据需要选格式
filtered_df.to_excel("filtered_result.xlsx", index=False)
# 导出csv用下面的代码,utf-8-sig编码避免中文乱码
# filtered_df.to_csv("filtered_result.csv", index=False, encoding="utf-8-sig")

超大文件适配方案(单文件超内存容量时使用)

如果原始数据是百万行级以上,一次性加载会占满内存,可以改用分块读取的逻辑,性能依然远高于手写逐行循环:

import pandas as pd

with open("target_sample_list.txt", "r", encoding="utf-8") as f:
    target_samples = {line.strip() for line in f if line.strip()}

# 每次加载10000行到内存处理,可根据自己的内存大小调整chunksize值
result_chunks = []
for chunk in pd.read_csv("raw_data.csv", dtype={"Sample_name": str}, chunksize=10000):
    match_chunk = chunk[chunk["Sample_name"].isin(target_samples)]
    result_chunks.append(match_chunk)

# 拼接所有匹配的分块后导出
final_df = pd.concat(result_chunks, ignore_index=True)
final_df.to_csv("filtered_result.csv", index=False, encoding="utf-8-sig")

性能差异说明

  • 逐列逐行循环方案:每匹配一个值都要遍历整个目标列表,10万行数据+1000个目标样本的场景通常需要数秒到数十秒运行时间,数据量翻倍运行时间接近指数级上升
  • 本方案:集合匹配加底层C实现的矢量化操作,同数据量场景运行时间通常在百毫秒级,内存足够的情况下千万行级数据也能在数秒内处理完成

内容的提问来源于stack exchange,提问作者Brandon Matsumoto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 15:24:19