如何提升Python Pandas数据处理速度?批量删除代码优化求助
大规模数据过滤优化方案
问题根源
你当前的循环过滤方式效率极低:201429次循环中,每次都要生成新的DataFrame并复制剩余数据,时间复杂度达到O(n*m)(n为dfr_3行数,m为排除值数量),完全没利用pandas的矢量化优势,同时单线程运行导致硬件(Xeon+64GB内存)利用率仅4%。
核心优化方案:矢量化替代循环
直接用pandas的isin方法完成一次性过滤,底层基于numpy矢量化运算,速度比循环快几个数量级:
# 提取需要排除的v1唯一值 exclude_v1 = pd.unique(df['v1']) # 一次性筛选出不在排除列表中的行 dfr_3_filtered = dfr_3[~dfr_3['v1'].isin(exclude_v1)]
这行代码会直接生成布尔掩码,一次性完成过滤,无需任何循环,内存占用也远低于循环方式。
进阶优化:内存与读取优化
你当前使用dtype='unicode'(对应pandas的object类型)会浪费大量内存,换成更高效的string类型可减少内存占用,进一步提升处理速度:
# 读取文件时指定v1列为string类型(比unicode更节省内存) df = pd.read_csv('rent3_dupli_mayor_0.csv', sep=',', dtype={'v1': 'string'}, low_memory=False) dfr_3 = pd.read_csv('renta3_3_1.csv', sep=',', dtype={'v1': 'string'}, low_memory=False)
如果v1列是数值类型,还可以指定int64/float64等更精准的类型,内存占用会更低。
未来大文件适配:多进程分块处理
如果后续文件大到无法一次性加载到内存,可采用分块读取+多进程并行处理,充分利用多核CPU和大内存:
from multiprocessing import Pool # 定义单块数据的过滤函数 def filter_chunk(chunk): exclude_v1 = pd.unique(df['v1']) return chunk[~chunk['v1'].isin(exclude_v1)] # 分块读取大文件(按100万行/块调整) chunk_size = 1_000_000 chunks = pd.read_csv('renta3_3_1.csv', sep=',', dtype={'v1': 'string'}, chunksize=chunk_size) # 多进程并行处理所有块 with Pool() as pool: filtered_chunks = pool.map(filter_chunk, chunks) # 合并所有处理后的块 dfr_3_filtered = pd.concat(filtered_chunks, ignore_index=True)
该方案会将大文件拆分为多个小块,由多个进程同时处理,大幅提升CPU利用率,缩短处理时间。
内容的提问来源于stack exchange,提问作者user19904762
相关产品推荐
相关产品推荐

