如何使用Rust在Polars中创建vector/list类型的列

bq3bfh9z  于 2023-04-21  发布在  其他
关注(0)|答案(1)|浏览(200)

我试图在Polars中创建一个 Dataframe ,它有一列固定大小的向量,表示2d空间中的位置。不幸的是,下面的代码无法编译。

let df2 = df!(
    "a" => &[1, 2, 3],
    "b" => &[[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]
)?;

我得到:

the trait `polars::prelude::NamedFrom<&[[{float}; 2]; 3], _>` is not implemented for `Series`

这可以使用Rust API来完成吗?我可以单独为x和y坐标放置一列,但实际上我有多列,一些3D位置,一些4D四元数。将它们分开感觉不对。

f3temu5u

f3temu5u1#

存储在列中的列表使用Series数据类型,您看到的错误是编译器无法对float数组的数组执行此转换。您可以通过使用.iter().collect::<Series>()将嵌套数组转换为系列来实现所需的功能

let df = df! {
    "a" => &[1, 2, 3],
    "b" => [[1.0, 2.0].iter().collect::<Series>(), [3.0, 4.0].iter().collect(), [5.0, 6.0].iter().collect()]
}.unwrap();


println!("{:?}", df);

shape: (3, 2)
┌─────┬────────────┐
│ a   ┆ b          │
│ --- ┆ ---        │
│ i32 ┆ list[f64]  │
╞═════╪════════════╡
│ 1   ┆ [1.0, 2.0] │
├╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤
│ 2   ┆ [3.0, 4.0] │
├╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤
│ 3   ┆ [5.0, 6.0] │

相关问题