如何用Python从200万+行CSV文件中按条件提取指定列数据?
处理大体积CSV文件:按条件筛选并提取指定列
针对200万+行的CSV文件,这里提供两种高效的Python处理方案,适配不同内存场景:
方案一:用内置csv模块(低内存占用,适合超大文件)
该方法逐行读取处理,不会把整个文件加载到内存,内存紧张时优先选这个。
import csv # 替换成你的输入输出文件路径 input_file = "source_data.csv" output_file = "filtered_result.csv" # 需要保留的目标列 target_cols = ["ACC", "NUM", "NAM", "ODBIC"] with open(input_file, "r", encoding="utf-8") as infile, open(output_file, "w", newline="", encoding="utf-8") as outfile: # 用字典形式读取每行,直接通过列名访问数据 reader = csv.DictReader(infile) writer = csv.DictWriter(outfile, fieldnames=target_cols) # 写入结果表头 writer.writeheader() for row in reader: # 执行筛选逻辑:ODBIC为YES,且NAM是1或2(CSV读出来是字符串,按需转成整数) if row["ODBIC"] == "YES" and row["NAM"] in ("1", "2"): # 只写入目标列的数据 writer.writerow({col: row[col] for col in target_cols})
注意:如果你的NAM列实际存储的是整数类型,可把判断逻辑改成int(row["NAM"]) in (1, 2)。
方案二:用pandas库(代码简洁,内存充足时更高效)
现代电脑内存一般能轻松容纳200万行CSV数据,用pandas写代码更简洁高效。
先安装pandas(如果没装的话):
pip install pandas
处理代码:
import pandas as pd # 只加载需要的列,减少内存消耗 df = pd.read_csv("source_data.csv", usecols=["ACC", "NUM", "NAM", "ODBIC"]) # 应用筛选条件:ODBIC=YES,且NAM是1/2 filtered_df = df[(df["ODBIC"] == "YES") & (df["NAM"].isin([1, 2]))] # 保存结果,不写入pandas自带的索引列 filtered_df.to_csv("filtered_result.csv", index=False)
注意:如果NAM列是字符串格式,把isin([1,2])改成isin(["1","2"])即可。
用你提供的示例数据测试,两种方案都会输出你预期的结果。
内容的提问来源于stack exchange,提问作者R. John
相关产品推荐
相关产品推荐

