根据Yaml文件中的某些规则过滤熊猫df

时间:2018-11-20 12:32:10

标签: python pandas yaml

我有一个配置yaml文件,该文件应该由客户使用并且易于编辑。在yaml文件中,有一些规则:

variables:
  used_often: ['good','bad', 3]

rules:
  - dataframe_name: my_name
    variables: 
      consequence: used_often
    query: 'column_a = 5 and column_b in ${consequence} and column_c != 1'
    output: {'column_d': 1}
  - more rules like this

如您所见,我想在df my_name中过滤3列,其中column_a = 5等,然后在此过滤器的结果中添加/更改column_d,以便所有行与查询匹配的column_d = 1

我的问题是如何使查询更易于使用熊猫进行过滤。就目前而言,上面的查询应该以这样的大熊猫结尾:

my_name[(my_name["column_a"] == 5) &
 (my_name["column_b"].isin(['good','bad', 3])) &
 (my_name["column_c"] != 1)]

因此,我必须做很多处理才能解释yaml中的查询。是否有任何工具可以帮助我或以更好的方式设置查询格式(只要客户端可以轻松地编写yaml文件,我就可以完全自由地构建它)?

谢谢!

1 个答案:

答案 0 :(得分:0)

有一个pandas.query函数可以完成所有https://pandas.pydata.org/pandas-docs/version/0.22/generated/pandas.DataFrame.query.html

所以我在yaml中的查询变为:

query: 'column_a == 5 and column_b in @consequence and column_c !=1'

然后在python中,我可以读取yaml和过滤器:

df.query(my_query)