我有点困惑。创建带有“简单”选项向量的极系列
Vec<Option<f64>>
起作用..。但是具有复杂值的选项向量(例如向量/数组)不是吗?!
Vec<Option<Vec<f64>>>
为什么?以及如何让它发挥作用?
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])];变成一个系列时,我会收到以下错误消息:
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发布于 2022-09-02 12:29:44
这里有一个由this启发的解决方案
创建一个结构-> Json -> DataFrame ->系列。
有点让人费解,但对我有用。
欢迎对更好的解决方案提出任何建议:)
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();
}https://stackoverflow.com/questions/73577916
复制相似问题