如何优化DataFrame数据过滤操作 提升大规模数据集筛选效率
DataFrame按指定列表过滤的优化方案
基础优化(性能提升最明显,写法最简洁)
pandas内置的isin()是底层C实现的矢量化操作,相比你写的多|逐条件判断,在十万级以上行的DataFrame上性能可提升数倍到数十倍,还能避免手动写多个判断条件的语法错误,写法如下:
# 先修正原代码的语法错误:c3和d2之间漏了逗号 u_choices = ['a1', 'b1', 'b2', 'c3', 'd2', 'e4'] # 一行完成过滤,和原需求逻辑完全一致 df1 = df2[df2['user_option'].isin(u_choices)]
进阶极致优化(适用于百万行以上的超大数据集)
如果数据量极大,且user_option列重复值占比高,可以选择以下两种方式进一步提速:
- 将目标列转为分类类型(category)后再过滤,降低底层计算量:
df2['user_option'] = df2['user_option'].astype('category') df1 = df2[df2['user_option'].isin(u_choices)]
- 直接调用numpy底层判断方法,跳过pandas层的额外开销:
import numpy as np df1 = df2[np.in1d(df2['user_option'].values, u_choices)]
你原有的写法除性能问题外,还容易出现手误:比如条件里的(df2['user_option'] == 'a2d2)漏了右引号,u_choices里的'c3' 'd2'漏了逗号,使用isin()方法只需维护好u_choices列表即可避免这类低级错误。
内容的提问来源于stack exchange,提问作者usert4jju7
相关产品推荐
相关产品推荐

