使用变量评估数据框列中的字符串

时间:2018-12-06 20:27:13

标签: python pandas

我具有以下格式的数据框:

Name           Factor     Expression   Year 
Hydro          0.075            <10    2010  
Hydro          0.075            >10    2010  
Hydro          0.075            <10    2011  
Hydro          0.075            >10    2011
Hydro          0.075            <10    2012

还有以下变量:i=3

当变量Expression位于表达式列中字符串的左侧时,我想过滤i列为true的数据框。

例如,第一行的值为3<10为真。

我想要的结果数据框是:

Name           Factor     Expression   Year 
Hydro          0.075            <10    2010  
Hydro          0.075            <10    2011  
Hydro          0.075            <10    2012

谢谢您的帮助。

1 个答案:

答案 0 :(得分:2)

Pandas的safer version of eval支持有限数量的操作。幸运的是,><可以工作,您可以将其与字符串串联一起使用:

i = '3'
idx = pd.eval(i + df.Expression)
df.loc[idx]

    Name  Factor Expression  Year
0  Hydro   0.075        <10  2010
2  Hydro   0.075        <10  2011
4  Hydro   0.075        <10  2012

正如@coldspeed指出的那样,上述方法仅适用于< 100行*的DataFrame,这不是理想的选择。他还提出了以下解决方案:

df[[pd.eval(f"{i}{j}") for j in df['Expression']]]

*在以下问题中更深入地讨论了上述限制:AttributeError: 'PandasExprVisitor' object has no attribute 'visit_Ellipsis', using pandas eval