python - 如何在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
解决方案
你可以使用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
推荐阅读
- c# - 如何在 Blazor 的 c# 中取消 BlockBlobClient 上传中间流?
- amazon-web-services - terraform 有条件地创建 ECR 存储库(如果不存在)
- css - 有没有办法在保持大部分原始风格的同时对反应选择进行风格化?
- android - 未验证的应用程序屏幕未显示
- python - 如何编写 python 脚本将指标数据发送到 pushgateway
- android - 在不使用片段的情况下构建首选项屏幕的最佳 Compose 方法是什么?
- excel - 在PowerPoint中嵌入excel数据
- apache-spark - Pyspark 版本 3.x,对于大型 JSON 数据,重新分区无法正常工作
- deployment - Laravel Forge 部署问题
- python - Python:将数据文件格式转换为字符串