我有一个模拟的数据框,其中一列是用以下内容创建的:

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

这只是一个数据帧,数字为1到200,有一列"a".

df[df["A"] > 20]

但是列名,布尔值,>,值20必须作为字符串变量传入.所以,我相信数据帧.应使用pandas中的eval函数进行此操作.

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是boolean,>,而value是值20.最后三个参数在函数调用中作为字符串传递:

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

当我调用这个函数时,它总是给我一个错误.我在谷歌上搜索过,不知道如何解决它.我也没有见过这样对Pandas 进行判断的例子.

推荐答案

该错误与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]

Python相关问答推荐

Python daskValue错误:无法识别的区块管理器dask -必须是以下之一:[]

根据不同列的值在收件箱中移动数据

SQLGory-file包FilField不允许提供自定义文件名,自动将文件保存为未命名

max_of_three使用First_select、second_select、

对某些列的总数进行民意调查,但不单独列出每列

如何删除索引过go 的lexsort深度可能会影响性能?' &>

管道冻结和管道卸载

Python键入协议默认值

如何从pandas的rame类继承并使用filepath实例化

关于Python异步编程的问题和使用await/await def关键字

连接一个rabrame和另一个1d rabrame不是问题,但当使用[...]'运算符会产生不同的结果

Matplotlib中的字体权重

LocaleError:模块keras._' tf_keras. keras没有属性__internal_'''

手动设置seborn/matplotlib散点图连续变量图例中显示的值

并行编程:同步进程

如何重新组织我的Pandas DataFrame,使列名成为列值?

如果不使用. to_list()[0],我如何从一个pandas DataFrame中获取一个值?

Matplotlib中的曲线箭头样式

仅取消堆叠最后三列

如何将参数名作为参数传入到函数中?