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

基于给定列表筛选Pandas DataFrame列(列表元素可能不存在)

高效筛选Pandas DataFrame中存在的列(替代列表推导式的向量化方案)

完全理解你的痛点——当处理超大型DataFrame时,哪怕逻辑简单的Python列表推导式,也可能因为循环开销拖慢速度。这里有个底层优化的向量化方法,比列表推导式高效得多,而且代码更简洁:

核心方案:利用Pandas Index的intersection方法

Pandas的Index对象(也就是df.columns的类型)内置了intersection方法,这个方法是C语言实现的向量化操作,直接基于哈希表计算交集,完全避开了Python循环的开销。

基础用法(保持DataFrame列的原有顺序)

import pandas as pd

# 你的示例DataFrame
df = pd.DataFrame([[1,2,3,4,5],[6,7,8,9,10]], columns=list('ABCDE'))
fil_lst = ['A', 'D', 'F']

# 高效筛选
new_df = df[df.columns.intersection(fil_lst)]

运行后得到的结果完全符合你的预期:

A  D
0  1  4
1  6  9

进阶:保持筛选列表的原始顺序

如果希望结果列的顺序和你给出的fil_lst中存在的列顺序一致(而不是DataFrame本身的列顺序),可以反过来用筛选列表创建Index再求交集:

# 比如筛选列表顺序是['D', 'A', 'F']
fil_lst = ['D', 'A', 'F']
new_df = df[pd.Index(fil_lst).intersection(df.columns)]

此时结果列顺序是D在前,A在后,和筛选列表的顺序匹配:

D  A
0  4  1
1  9  6

为什么这个方法比列表推导式快?

  • 列表推导式本质是Python层面的循环,每一次col in df.columns虽然是O(1)的哈希查找,但循环本身会带来额外开销;
  • intersection是Pandas底层优化的C级向量化操作,直接对整个Index进行哈希交集计算,没有Python循环的额外消耗,在处理大型DataFrame或长筛选列表时,性能差距会非常明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 19:07:41