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

如何优化30000行DataFrame中重复邮箱检测的嵌套循环?

优化方案:用Pandas向量化操作替代双重循环

你的代码卡顿核心原因是双重循环的O(n²)时间复杂度,3万行数据会产生9亿次循环操作,完全没必要——Pandas内置了高效的重复值检测方法,直接用向量化操作就能搞定,性能提升几个数量级。

优化后的代码

import pandas as pd

data={'Name':['Danny','Damny','Monny','Quony','Dimny','Danny'],
      'Email':['danny@gmail.com','danny@gmail.com','monny@gmail.com','quony@gmail.com','danny@gmail.com','danny@gmail.com']}
df = pd.DataFrame(data)

# 标记所有重复的邮箱行
df['email_repeated'] = df['Email'].duplicated(keep=False).map({True: 'ja', False: None})

代码说明

  • df['Email'].duplicated(keep=False):返回一个布尔数组,所有重复出现的邮箱(包括第一次出现的)都会标记为True,刚好匹配你要标记所有重复行的需求。
  • .map({True: 'ja', False: None}):把布尔值转换成你需要的'ja'或空值,完成列值的批量赋值。
  • 整个过程是Pandas的向量化操作,底层基于C实现,不需要Python层面的循环,处理3万行数据几乎瞬间完成。

原代码效率低的原因

  1. 双重循环:3万行数据需要执行9亿次循环,Python本身循环性能弱,这种量级完全扛不住。
  2. 链式索引修改:df['email_repeated'][k]的写法会触发Pandas的SettingWithCopyWarning,且每次单独修改行值没有利用批量处理的优势,进一步拖慢速度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:10:19