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

如何基于指定商品列表高效过滤GB级独热编码格式的DataFrame?

数GB级One-Hot编码订单DataFrame的高效过滤方案

你需要的过滤逻辑是保留目标商品列中任意一列值为1的行,直接用pandas原生向量化运算实现即可,完全避免Python层循环,性能是所有可行方案中最高的,两种不同场景的实现方式如下:

场景1:数据可完整加载到内存

如果你的服务器/本地内存足够放下全部数据,直接一行代码完成过滤:

import pandas as pd

interesting_products = ['PRODUCT1', 'PRODUCT3']
# 读取时指定商品列数据类型为int8,相比默认float64内存占用仅为1/8,大幅提升运算效率
dtype_map = {col: 'int8' for col in interesting_products}
df = pd.read_csv("your_order_file.csv", dtype=dtype_map)

# 核心过滤逻辑:行方向判断目标列是否至少有一个1
filtered_df = df[df[interesting_products].any(axis=1)]

场景2:数据过大无法全量加载到内存

采用分块读取+逐块过滤+增量写入的方案,全程内存占用只和单块数据大小有关,普通配置的电脑也能轻松处理10GB以上的文件:

import pandas as pd

interesting_products = ['PRODUCT1', 'PRODUCT3']
# 可根据内存大小调整单块行数,内存足够的话设置为100万行也可以
chunk_size = 100000
output_path = "filtered_orders.csv"
is_first_chunk = True

for chunk in pd.read_csv("your_large_order_file.csv", chunksize=chunk_size, dtype={col: 'int8' for col in interesting_products}):
    filtered_chunk = chunk[chunk[interesting_products].any(axis=1)]
    # 首块写入表头,后续块仅写入数据避免重复表头
    filtered_chunk.to_csv(output_path, mode="a", header=is_first_chunk, index=False)
    is_first_chunk = False

性能说明

  • 核心的any(axis=1)运算为pandas底层C实现,比用apply、iterrows等Python层遍历的方案快50~100倍
  • 不需要额外引入Dask、PySpark等分布式框架,学习成本和运行开销极低

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:24:03