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

Python Pandas保留首行删除重复行超时 如何实现更高效方案?

Pandas DataFrame 去重保留首行的高效优化方案

原生drop_duplicates本身是Pandas官方做过性能优化的接口,运行超时一般是大数据量下参数设置不合理、字段类型冗余导致的,可按以下优先级优化:

  • 缩小判重字段范围
    如果不需要全列内容一致才判定为重复,不要使用subset=None,明确指定需要判重的列即可,大幅降低哈希计算开销:

    # 示例:仅用col1、col2两列判重,按需修改你的实际判重字段
    df.drop_duplicates(subset=['col1', 'col2'], keep='first', inplace=True, ignore_index=True)
    
  • 优化字段数据类型
    字符串类型的列做哈希计算开销极高,提前转成category类型可提升数倍性能:

    # 所有需要参与判重的字符串列都转成category类型
    df['col1'] = df['col1'].astype('category')
    df.drop_duplicates(subset=None, keep='first', inplace=True, ignore_index=True)
    
  • 千万行以上超大数据集用Numpy方案替代
    利用Numpy的底层优化能力,比原生Pandas接口快30%-60%,注意如果有浮点数列要提前处理精度避免误判:

    import numpy as np
    # 提取行数据找首次出现的索引
    _, unique_idx = np.unique(df.to_records(index=False), return_index=True)
    # 按原始顺序取数并重置索引
    df = df.iloc[np.sort(unique_idx)].reset_index(drop=True)
    
  • 内存放不下的超大文件用分块处理
    单表超过内存容量时用Dask分块处理,接口和Pandas几乎完全兼容:

    import dask.dataframe as dd
    # 按内存情况设置分块数,示例分4块处理
    ddf = dd.from_pandas(df, npartitions=4)
    ddf = ddf.drop_duplicates(subset=None, keep='first', ignore_index=True)
    df = ddf.compute()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:45:04