安全 ast 文字 eval 的纯极坐标版本

问题描述 投票:0回答:2

我有这样的数据,

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

我想将字符串转换为列表 我用,

df = df.with_columns(a=pl.col('a').str.json_decode())

它给了我,

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

然后我就用这个功能,

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)))

并获得预期的输出,但是有没有一种纯极地方法可以实现相同的效果?

python-polars
2个回答
1
投票

尚无通用的 ast 评估。

json_decode
的问题在于列表表示使用单引号(而不是 JSON 中使用的双引号)。

在您的示例中,可以通过按如下方式替换单引号来避免此问题。

df.with_columns(
    pl.col("a").str.replace_all("'", '"', literal=True).str.json_decode()
)
shape: (1, 1)
┌─────────────────┐
│ a               │
│ ---             │
│ list[str]       │
╞═════════════════╡
│ ["b", "c", "d"] │
└─────────────────┘

0
投票
df.with_columns(pl.col.a.str.replace_all("'", '"').str.json_decode())
© www.soinside.com 2019 - 2024. All rights reserved.