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

Pandas基于列内容拼接两个CSV并筛选符合价差条件行的方法

Pandas 实现通用方案

整个流程基于pandas实现,针对大型CSV做了性能优化,步骤如下:

  • 第一步:导入依赖、读取并清洗数据
    读取文件时优先只加载需要的列节省内存,同时强制把价格列转为数值类型,避免前导零、字符串格式数字导致的计算错误。
    import pandas as pd
    
    # 读取文件,大文件场景下用usecols指定只加载需要的列,大幅降低内存占用
    df1 = pd.read_csv("第一个CSV文件路径.csv")
    df2 = pd.read_csv("第二个CSV文件路径.csv", usecols=["Unit", "Price"])
    # 价格列转数值,遇到脏数据自动转空值,避免计算报错
    df2["Price"] = pd.to_numeric(df2["Price"], errors="coerce")
    
  • 第二步:匹配价格生成df3
    用哈希映射的方式匹配价格,比多表联查性能高很多,适合大表场景。注意实际存储时不建议使用重复列名,会导致后续列操作报错,所以先给价格列加区分后缀,最终输出时再调整列名对齐示例即可。
    # 构建商品名到价格的映射字典,查找时间复杂度O(1)
    price_lookup = df2.set_index("Unit")["Price"]
    
    # 为水果、蔬菜分别匹配对应价格
    df3 = df1.copy()
    df3["Fruit_Price"] = df3["Fruit"].map(price_lookup)
    df3["Veg_Price"] = df3["Vegetable"].map(price_lookup)
    
    # 可选:删除匹配不到价格的无效行
    df3 = df3.dropna(subset=["Fruit_Price", "Veg_Price"]).reset_index(drop=True)
    
  • 第三步:按价差规则筛选生成df4
    计算同一行两类商品的价格差绝对值,筛选差值在5美元以内的行即可。
    # 筛选价差≤5的行
    df4 = df3[abs(df3["Fruit_Price"] - df3["Veg_Price"]) <= 5].reset_index(drop=True)
    
    # 调整列顺序对齐示例结构,再重命名为目标列名
    df3 = df3[["Index", "Fruit", "Fruit_Price", "Vegetable", "Veg_Price"]]
    df4 = df4[["Index", "Fruit", "Fruit_Price", "Vegetable", "Veg_Price"]]
    
    df3.columns = ["Index", "Fruit", "Price", "Vegetable", "Price"]
    df4.columns = ["Index", "Fruit", "Price", "Vegetable", "Price"]
    

大文件额外优化提示

  • 如果单文件大小超过内存容量,可以将df2的价格映射提前存为字典,df1用分块读取(pd.read_csv(..., chunksize=100000))的方式逐块处理、逐块匹配、逐块筛选,最后把所有块的结果拼接就行,不会出现内存溢出问题
  • 不要用两次merge的方式匹配价格,映射查找的方式在千万级数据量下速度要快数倍
  • 读取CSV时可以提前指定dtype参数给列设置合适的数据类型(比如字符串列用category类型),进一步压缩内存占用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.22 16:12:25