首页 > 解决方案 > 使用变量评估数据框列中的字符串

问题描述

我有以下格式的数据框:

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位于表达式列中字符串的左侧时,我想过滤列计算为真的数据框。

例如,第一行将评估为真为3<10

我想要的结果数据框是:

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

感谢您的任何帮助。

标签: pythonpandas

解决方案


Pandas 有一个更安全的版本,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


推荐阅读