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

如何使用filter关键字与lambda函数筛选pandas DataFrame指定列?

如何用filter关键字结合lambda函数筛选pandas DataFrame的指定列

你需要明确:pandas的DataFrame.filter()方法是用来按名称筛选行/列的(比如匹配列名、索引名),不能直接传入lambda按行内容过滤。如果你想用Python内置的filter函数配合lambda实现行筛选,得结合DataFrame的行迭代器,同时更推荐用pandas原生的布尔索引(性能更高)。

方法1:Python内置filter + df.iterrows()

内置filter可以对可迭代对象做过滤,df.iterrows()会返回每行的(索引, 行Series)元组,所以lambda需要处理这个元组:

import pandas as pd
data = [{
'Language': 'Python',
'Percent grow': 56
}, {
'Language': 'Java',
'Percent grow': 34
}, {
'Language': 'C',
'Percent grow': 25
}, {
'Language': 'C++',
'Percent grow': 12
}, {
'Language': 'go',
'Percent grow': 5
}]
df = pd.DataFrame(data)

# 用内置filter筛选符合条件的行
filtered_rows = filter(lambda x: x[1]['Percent grow'] > 30, df.iterrows())
# 将筛选结果转为DataFrame
filtered_df = pd.DataFrame([row[1] for row in filtered_rows])
print(filtered_df)

输出结果:

Language  Percent grow
0   Python            56
1     Java            34

方法2:更高效的pandas原生布尔索引

虽然你问的是filter+lambda,但处理DataFrame时,布尔索引是最优方案——它是向量化操作,比迭代行快得多,代码也更简洁:

filtered_df = df[df['Percent grow'] > 30]
print(filtered_df)

输出结果和上面完全一致,数据量越大,这个方法的优势越明显。

为什么你的原代码会报错?

你写的df.filter(f)调用的是pandas的DataFrame.filter()方法,它的参数只能是items(指定列/行名称)、like(模糊匹配名称)、regex(正则匹配名称),不支持传入lambda按行内容过滤,因此会触发错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:01:02