我有一个配置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文件,我就可以完全自由地构建它)?
谢谢!
答案 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)