如何优化Python实现的Excel地址数据筛选函数的运行速度?
Excel地址筛选函数优化方案
原有代码性能瓶颈
- 第二层筛选唯一用户数时采用
for循环逐次过滤全量数据集,时间复杂度极高,是耗时最长的核心原因 - 存在多处不必要的Python原生类型(字典、列表)与Pandas数据结构的转换,额外增加了性能开销
- 原代码还存在笔误:循环中
append(ip)的ip变量未定义,应该是当前循环变量ad
优化后代码
import pandas as pd def main(): path = input('请输入文件路径:') name = input('请输入文件名:') file = f"{path}/{name}.xlsx" address_history = pd.read_excel(file) times = int(input('请输入地址最低出现次数阈值:')) num = int(input('请输入地址最低关联用户数阈值:')) # 一次性聚合计算每个地址的出现次数和唯一用户数,仅需遍历一次数据集 address_stats = address_history.groupby('address', as_index=False).agg( occurences=('address', 'count'), unique_users=('Username', 'nunique') ) # 直接用布尔索引完成两层筛选,全程走Pandas向量化运算,效率极高 df_final = address_stats[(address_stats['occurences'] >= times) & (address_stats['unique_users'] >= num)] with pd.option_context('display.max_rows', None, 'display.max_columns', None): print(df_final) # 如果你使用Jupyter环境可以替换为display(df_final) return address_history
优化效果说明
- 数据量越大提升越明显,万级以上数据量通常能有几十到上百倍的性能提升
- 代码逻辑更简洁,减少了中间变量和循环逻辑,可维护性更高
内容的提问来源于stack exchange,提问作者George Papadopoulos
相关产品推荐
相关产品推荐

