You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否将Polars表达式字符串化并实现往返转换?

Polars表达式与字符串的相互转换及往返支持

1. 将Polars表达式/操作转换为字符串

针对单独的表达式

如果先构建了Polars表达式对象,直接调用str()方法就能获取其字符串表示:

import polars as pl

expr = pl.col('a') < 10
print(str(expr))  # 输出: col("a") < 10

针对完整的DataFrame操作语句

要把df.filter(pl.col('a')<10)这类完整操作转为字符串,本质是Python代码的字符串化。如果是静态代码直接用字符串字面量包裹即可;如果是动态生成的操作,可基于表达式拼接:

# 静态生成操作字符串
filter_str = "df.filter(pl.col('a')<10)"

# 基于动态表达式生成
expr = pl.col('a') < 10
filter_str = f"df.filter({expr})"
print(filter_str)  # 输出: df.filter(col("a") < 10)

注:Polars表达式的字符串表示会省略pl.前缀,但功能与原代码完全等价。

2. 字符串转Polars操作(往返转换)

使用Python的eval()函数可以实现往返转换,但需注意两个关键点:

  • 确保当前环境已导入polars as pl,且目标DataFrame对象(比如df)已存在
  • 警惕安全风险:eval()会执行任意Python代码,绝对不要用于处理不可信的用户输入

示例代码:

import polars as pl

df = pl.DataFrame({'a': [5, 15, 20]})
filter_str = "df.filter(pl.col('a')<10)"

# 执行字符串中的操作
result_df = eval(filter_str)
print(result_df)
# 输出:
# shape: (1, 1)
# ┌─────┐
# │ a   │
# │ --- │
# │ i64 │
# ╞═════╡
# │ 5   │
# └─────┘

如果是单独的表达式字符串,同样可以用eval()转为表达式对象:

expr_str = "pl.col('a')<10"
expr = eval(expr_str)
result_df = df.filter(expr)

3. 在图表标题中展示过滤条件

结合上述方法,你可以轻松将过滤条件转为字符串用于图表标题:

import matplotlib.pyplot as plt

# 动态生成过滤条件
threshold = 10
expr = pl.col('a') < threshold

# 用友好格式或原生表达式字符串作为标题
plt.title(f"数据筛选条件: a < {threshold}")
# 或者直接使用表达式的字符串表示
plt.title(f"数据过滤规则: {str(expr)}")

result_df = df.filter(expr)
plt.bar(result_df['a'], height=1)
plt.show()

内容的提问来源于stack exchange,提问作者BSalita

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 07:50:26