我有这样的数据,
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)))
并获得预期的输出,但是有没有一种纯极地方法可以实现相同的效果?
尚无通用的 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"] │
└─────────────────┘
df.with_columns(pl.col.a.str.replace_all("'", '"').str.json_decode())