根据yaml文件中的一些规则过滤pandas-df



我有一个配置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

正如你在这里看到的,我想过滤dfmy_name中的3列,其中column_a = 5等,然后在这个过滤的结果中添加/更改column_d,使所有与查询匹配的行都有column_d = 1

我的问题是,如何让查询更容易被panda过滤。按照目前的情况,上面的查询最终应该是这样的:

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

所以我必须做大量的处理来解释yaml中的查询。有什么工具可以帮助我,或者有更好的方法来格式化查询吗?(我可以完全自由地构建yaml文件,只要客户端可以合理轻松地编写它(?

谢谢!

有一个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)

最新更新