python - 如何评估 DataFrame 中包含的逐行表达式(如 df.eval() 但动态)?
问题描述
假设您有一个 DataFrame,其中有一列包含表达式(指其他列),是否可以评估该列中包含的表达式?
我知道可以使用pd.eval()
并df.eval()
应用按列操作(如下所示)。示例取自:
https://jakevdp.github.io/PythonDataScienceHandbook/03.12-performance-eval-and-query.html
假设你有:
import pandas as pd
df = pd.DataFrame([[1, 2], [2, 3], [5, 6]], columns=['A', 'B'])
然后你可以写:
df.eval('(A + B)')
你会得到一个系列3, 5, 11
(预期)。
现在,如果该表达式实际上因行而异并且实际上存储为列,该怎么办?比如这个数据框:
df = pd.DataFrame([[1, 2, "A + B"], [2, 3, "A - B"], [5, 6, "A + 2 * B"]], columns=['A', 'B', 'C'])
如何评估 C 列中的表达式?
这种情况下的预期结果是一系列3, -1, 17
.
谢谢你的帮助。
解决方案
利用
>>> np.diag(df.C.apply(df.eval).values)
array([ 3, -1, 17])
即使这是一个糟糕的设计 IMO,因为您是 I)在字符串中硬编码操作,使得在需要时更难操作它,II)将这些操作作为字符串存储在 pandasDataFrame
中,这对于许多字符串来说很慢-涉及的操作。
推荐阅读
- maven - 从 Maven 框架执行 jmx 脚本时,在 Jmeter 中为 ${__UUID()} 函数使用用户参数预处理器不起作用
- android - layout_constraintHeight_percent 屏幕大小
- react-native - 运行 npm throws 没有权限
- java - JPA Hibernate OneToMany 枚举 - 未映射的类错误
- kotlin - kotlin中sortBy - sortedBy和sortWith - sortedWith有什么区别
- excel - 在下拉列表中创建唯一项目列表
- git - GitLab:错误:未能将一些参考资料推送到
- sql-server - 在 SQL Server 中使用条件对多个字段进行排序
- ios - init 函数中具有可空性的边缘情况
- python - 如何将每个循环数据分配给for循环中的多个列?