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

如何用纯Polars实现类似safe_literal_eval的字符串转列表功能?

问题

给定如下Polars DataFrame:

df = pl.DataFrame({'a': ["['b', 'c', 'd']"]})

想要将字符串格式的列表转为真正的列表类型,尝试使用str.json_decode()时出现报错:

ComputeError: error inferring JSON: InternalError(TapeError) at character 1 (''')

之后通过map_elements结合ast.literal_eval实现了需求:

import ast
def safe_literal_eval(val):
    try:
        return ast.literal_eval(val)
    except (ValueError, SyntaxError):
        return val
df = df.with_columns(a=pl.col('a').map_elements(safe_literal_eval, return_dtype=pl.List(pl.String)))

请问是否存在纯Polars的实现方式达成同样效果?

纯Polars实现方案

原因分析

报错是因为JSON规范要求字符串必须用双引号包裹,但你的输入字符串用的是单引号,str.json_decode()无法解析这种格式。

实现代码

可以先将字符串中的单引号替换为双引号,再使用str.json_decode(),同时用try_catch处理转换失败的情况,完全用Polars内置函数实现:

df = df.with_columns(
    a=pl.col('a')
        .str.replace_all("'", '"')
        .str.json_decode(pl.List(pl.String))
        .try_catch(pl.col('a'))  # 转换失败时返回原字符串
)

效果验证

执行后df的a列会被转为List(String)类型,对于符合格式的输入能正常转换,转换失败的情况会保留原字符串,和你之前的safe_literal_eval逻辑一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 16:02:03