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

如何根据列表中的筛选条件对Pandas DataFrame进行筛选

如何根据列表中的筛选条件对Pandas DataFrame进行筛选

嘿,我懂你说的这种需求!有时候我们会提前准备好几个不同的筛选规则,然后根据业务逻辑选其中一个来过滤DataFrame,这完全可以实现,我给你分享几个实用的方法,你可以根据自己的情况选~

方法一:用字符串条件 + eval()

如果你的筛选条件是以字符串形式存在列表里,直接用eval()就能把字符串转换成可执行的筛选逻辑,生成布尔掩码来过滤DataFrame。举个实际例子:

首先创建测试用的DataFrame:

import pandas as pd
df = pd.DataFrame({'col1': [1, 4, 2, 5, 3], 'col2': ['a', 'b', 'c', 'd', 'e']})

然后定义你的筛选条件列表:

filter_ls = [
    'df.col1 > 3',  # 第一个条件:col1大于3
    'df.col2 == "b"',  # 第二个条件:col2等于b
    '(df.col1 > 2) & (df.col2 != "d")'  # 第三个条件:col1大于2且col2不等于d
]

假设根据之前的逻辑,你要选列表里第0个条件,那就这么做:

# 选中目标筛选条件
selected_filter = filter_ls[0]
# 用eval生成布尔掩码
mask = eval(selected_filter)
# 过滤DataFrame
filtered_df = df[mask]
print(filtered_df)

不过要注意哦,如果你的筛选条件来自不可信的外部来源,eval()会有安全风险,因为它会执行任意代码,这时候建议用下面的方法。

方法二:用lambda函数存筛选条件

把每个筛选规则写成lambda函数,让它接收DataFrame作为参数,返回对应的布尔掩码,这种方式更安全,也更灵活。

还是用刚才的DataFrame,定义lambda形式的条件列表:

filter_ls = [
    lambda df: df.col1 > 3,
    lambda df: df.col2 == "b",
    lambda df: (df.col1 > 2) & (df.col2 != "d")
]

选中条件后直接调用lambda函数就能过滤:

selected_filter = filter_ls[0]
filtered_df = df[selected_filter(df)]
print(filtered_df)

这种方法完全不用担心安全问题,因为lambda是你预先定义好的逻辑,不会执行未知代码,推荐在条件可控的时候使用。

方法三:用query()方法

Pandas的query()方法支持用字符串写筛选条件,语法更简洁,不需要写df.前缀,用起来很顺手,而且安全性也不错。

同样的DataFrame,定义简洁版的条件列表:

filter_ls = [
    'col1 > 3',
    'col2 == "b"',
    'col1 > 2 and col2 != "d"'
]

然后用query()执行筛选:

selected_filter = filter_ls[0]
filtered_df = df.query(selected_filter)
print(filtered_df)

这个方法的可读性很高,适合写一些不太复杂的筛选条件,用起来特别省心。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 12:18:02