python - 使用变量评估数据框列中的字符串
问题描述
我有以下格式的数据框:
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
感谢您的任何帮助。
解决方案
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
推荐阅读
- cmake - CMAKE:使用 ld(设置 CMAKE_CXX_LINK_EXECUTABLE)作为链接器的“-rdynamic”问题
- solr - 如何从 SOLR 结果中排除特定数据?
- jupyter-notebook - 在 Jupyter Notebook 中录制音频
- javascript - Chartist.js - 为什么圆环图的中心是黑色的?
- javascript - 使用装饰器设置初始类属性值
- android - 在 Activity 中使用 androidTestImplementation 类
- python - 匹配两个不同 DataFrames Pandas 中的字符串值
- amazon-web-services - 如何在 CloudFront 中以 Web 服务器作为后端托管 SPA?
- github - 使用电子应用报告 GitHub 问题
- java - 使用 @Query 和 @Modifying 的 Spring 数据 JPA PSQLException