首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从选项向量创建极系列

如何从选项向量创建极系列
EN

Stack Overflow用户
提问于 2022-09-02 04:52:11
回答 1查看 164关注 0票数 0

我有点困惑。创建带有“简单”选项向量的极系列

Vec<Option<f64>>

起作用..。但是具有复杂值的选项向量(例如向量/数组)不是吗?!

Vec<Option<Vec<f64>>>

为什么?以及如何让它发挥作用?

代码语言:javascript
复制
use polars::prelude::*;

fn main() {

    // This does NOT work
    let v = vec![Some(vec![0.123, 67.12]), None, Some(vec![2.123, 44.98])];

    // This does NOT work
    let v = vec![Some([0.123, 67.12]), None, Some([2.123, 44.98])];

    // This does work
    let v = vec![Some(0.123), None, Some(44.98)];

    let s = Series::new("got nulls", v);

    println!("{:?}", s)
}

当我试图将let v = vec![Some(vec![0.123, 67.12]), None, Some(vec![2.123, 44.98])];变成一个系列时,我会收到以下错误消息:

代码语言:javascript
复制
error[E0277]: the trait bound `polars::prelude::Series: polars::prelude::NamedFrom<Vec<Option<Vec<{float}>>>, _>` is not satisfied
  --> src\main.rs:13:38
   |
13 |     let s = Series::new("got nulls", v);
   |             -----------              ^ the trait `polars::prelude::NamedFrom<Vec<Option<Vec<{float}>>>, _>` is not implemented for `polars::prelude::Series`
   |             |
   |             required by a bound introduced by this call
   |
   = help: the following other types implement trait `polars::prelude::NamedFrom<T, Phantom>`:
             <polars::prelude::Series as polars::prelude::NamedFrom<&polars::prelude::Series, str>>
             <polars::prelude::Series as polars::prelude::NamedFrom<T, ListType>>
             <polars::prelude::Series as polars::prelude::NamedFrom<T, T>>
             <polars::prelude::Series as polars::prelude::NamedFrom<T, [&'a str]>>
             <polars::prelude::Series as polars::prelude::NamedFrom<T, [AnyValue<'a>]>>
             <polars::prelude::Series as polars::prelude::NamedFrom<T, [Cow<'a, str>]>>
             <polars::prelude::Series as polars::prelude::NamedFrom<T, [NaiveDateTime]>>
             <polars::prelude::Series as polars::prelude::NamedFrom<T, [NaiveDate]>>
           and 37 others
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-02 12:29:44

这里有一个由this启发的解决方案

创建一个结构-> Json -> DataFrame ->系列。

有点让人费解,但对我有用。

欢迎对更好的解决方案提出任何建议:)

代码语言:javascript
复制
use polars::prelude::*;
use std::io::Cursor;

fn main() {
    #[derive(serde::Serialize)]
    struct ListData {
        data: Option<Vec<f64>>,
    }

    impl ListData {
        fn new(value: Option<Vec<f64>>) -> Self {
            ListData { data: value }
        }
    }

    let test_vec: Vec<ListData> = vec![
        ListData::new(Some(vec![0.123, 67.12])),
        ListData::new(None),
        ListData::new(Some(vec![2.123, 44.98])),
    ];

    let json = serde_json::to_string(&test_vec).unwrap();

    let cursor = Cursor::new(json);

    let df = JsonReader::new(cursor).finish().ok().unwrap();

    let s = df.column("data").unwrap().clone();

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73577916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档