如何在Polars中实现Pandas.DataFrame.eval()的等效功能?
在Polars中实现类似Pandas DataFrame.eval的功能
Polars确实没有直接的DataFrame级eval方法,但可以通过以下几种方式实现等效功能:
方法1:用pl.Expr.parse()配合with_columns
将字符串表达式解析为Polars原生表达式,再通过with_columns添加新列:
import polars as pl df = pl.DataFrame({"col1": [1, 2, 3], "col2": [4, 5, 6]}) # 解析表达式并生成新列 df = df.with_columns(pl.Expr.parse("col2 + col1").alias("col3"))
如果要同时计算多列,可批量传入解析后的表达式:
df = df.with_columns( pl.Expr.parse("col2 + col1").alias("col3"), pl.Expr.parse("col2 * col1").alias("col4") )
方法2:使用Polars SQL语法
Polars支持SQL查询,可通过pl.sql()实现列计算:
df = pl.sql("SELECT *, col2 + col1 AS col3 FROM self", df)
这种方式适配熟悉SQL语法的用户,逻辑直观。
方法3:动态构建表达式(复杂场景适用)
如果表达式是动态生成的,可直接构建Polars表达式对象(注意安全风险):
expr_str = "col2 + col1" # 仅在表达式来源完全可信时使用eval new_col = eval(f"pl.col('col2') + pl.col('col1')") df = df.with_columns(new_col.alias("col3"))
警告:
eval()执行未知来源的表达式存在注入风险,需谨慎使用。
内容的提问来源于stack exchange,提问作者Murtaza Arif
相关产品推荐
相关产品推荐

