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

问题描述 投票:0回答:1

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

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

我的问题是如何使查询更容易使用pandas进行过滤。就目前而言,上面的查询最终应该像这样的熊猫:

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

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

谢谢!

python pandas yaml
1个回答
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和filter:

df.query(my_query)
© www.soinside.com 2019 - 2024. All rights reserved.