我有这样的数据,
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 eval。问题在于
json_decode
列表表示使用单引号(而不是 JSON 中使用的双引号)。pl.Expr.str.replace_all
在您的示例中,可以通过使用如下方法替换单引号来解决此问题。问题是 json 需要双引号,而字符串数据使用单引号。
您可以
pl.Expr.str.replace_all()
先用来清理数据: