pl.DataFrame.map_rows
时将参数的字典而不是元组作为输入。
尝试类似的事情
df.map_rows(lambda x: udf({k:v for k, v in zip(df.columns, x)}))
我得到了一个
RuntimeError: Already mutably borrowed
在文档中说:
帧级map_rows无法跟踪列名(因为UDF是一个黑盒子,可以任意删除、重新排列、转换或添加新列);如果您想应用 UDF 来保留列名,则应使用表达式级 map_elements 语法。
但是这如何防止 Polars 将字典而不是元组传递给
udf
呢?就像打电话df.row(i, named=True)
一样。为什么结构体无法命名?
我知道我可以迭代
df.rows()
并执行用户定义的操作,然后转换回 pl.DataFrame
,但我希望有一种方法可以在不离开 Polars API 的情况下完成此操作。
我对潜在的 Rust 动态了解不够,但在调用
df.columns
之前捕获 map_rows
似乎有效。
cols = df.columns
df.map_rows(lambda x: udf({k:v for k, v in zip(cols, x)}))
此外,您可以使用
dict()
构造函数来简化字典的创建。
cols = df.columns
df.map_rows(lambda x: udf(dict(zip(cols, x))))