首页 > 解决方案 > 如何在python数据框中执行包含条件的字符串

问题描述

我正在过滤DataFrame一个函数内部。我得到了多个条件作为string参数,我必须使用这些条件来过滤DataFrame. exec()通常有助于执行字符串表达式,但我无法针对DataFrame.

这是一个小型的微型示例:

import pandas as pd
df = pd.DataFrame({'A':[30,60,90,40],'B':['X','X','X','Y']})
print(df)
      A  B
  0  30  X
  1  60  X
  2  90  X
  3  40  Y

现在,下面的代码自然会报错。我的问题是我们如何expression在下面的函数中评估这个字符串exectable(expression)并得到过滤DataFrame

def func(df,cond1,cond2):
    expression = "(df.A "+cond1+") & (df.B"+cond2+")"
    print(expression) # This results in --> (df.A < 50) & (df.B == 'X')

    return df[expression]
func(df,"< 50"," == 'X'")

所需的输出,

      A  B
  0  30  X

标签: pythondataframe

解决方案


你可以使用df.query

import pandas as pd

def func(df,cond1,cond2):
    expression = "(A "+cond1+") & (B"+cond2+")"
    return df.query(expression)

df = pd.DataFrame({'A':[30,60,90,40],'B':['X','X','X','Y']})
print( func(df,"< 50"," == 'X'") )

印刷:

    A  B
0  30  X

推荐阅读