Pandas:使用df.eval和字符串变量作为条件过滤

Pandas: Using df.eval with string variables as conditional filtering

我有一个模拟数据框,其中一列创建于:

df = pd.DataFrame({'A': np.arange(1,201)})

这只是一个数据框,其中包含数字 1 到 200,有一列“A”。 我想根据

这样的条件语句过滤数据框
df[df["A"] > 20]

但是列名、布尔值 > 和值 20 必须作为字符串变量传入。因此,我相信 pandas 中的 dataframe.eval 函数应该用于此目的。 为此,我创建了一个名为 select_twenty 的函数。在这里:

def select_twenty(input_df, column_name, boolean_arg, value):
    evaluated = input_df.eval(input_df[input_df[column_name] + boolean_arg + value])
    return evaluated

在上面的函数中,input_df是上面的模拟数据框,column_name是所选列的名称,boolean_arg是布尔值,>,而value是值20. 最后三个参数在函数调用中作为字符串传入:

select_twenty(df, "A", ">", "20")

当我调用该函数时,它一直给我一个 UFuncTypeError。我找遍了Google,但不知道如何解决。我还没有看到 pandas 中的 eval 以这种方式完成的示例。 那么,请问有人可以帮我处理过滤器吗?谢谢

该错误与 eval 参数内部的 + 相关,因为您正尝试使用 boolean_arg 添加 DataFrame 列值。您正在寻找的是:

def select_twenty(input_df, column_name, boolean_arg, value):
    evaluated = input_df[input_df.eval(column_name + boolean_arg + value)]
    return evaluated
print(select_twenty(df, "A", ">", "20"))
       A
20    21
21    22
22    23
23    24
24    25
..   ...
195  196
196  197
197  198
198  199
199  200

[180 rows x 1 columns]