【发布时间】:2022-08-13 20:49:35
【问题描述】:
我想知道如何使用 ndarray 从 CSV 创建时间序列数组?
我有这个 CSV:
date,value
1959-07-02,0.2930
1959-07-06,0.2910
1959-07-07,0.2820
1959-07-08,0.2846
1959-07-09,0.2760
1959-07-10,0.2757
我想使用带有 ndarray 支持的 plotly-rs 进行绘图。我成功反序列化了 CSV,但我想知道如何创建两个 Array 对象:一个日期为 NaiveDate (或字符串,因为我不确定 plotly-rs 是否原生支持 NaiveData),另一个值为 f64 ?下面是我的反序列化代码:
#[derive(Deserialize)]
struct Record {
#[serde(deserialize_with = \"naive_date_time_from_str\")]
date: NaiveDate,
value: f64
}
fn naive_date_time_from_str<\'de, D>(deserializer: D) -> Result<NaiveDate, D::Error>
where
D: Deserializer<\'de>,
{
let s: String = Deserialize::deserialize(deserializer)?;
NaiveDate::parse_from_str(&s, \"%Y-%m-%d\").map_err(de::Error::custom)
}
我可以像这样遍历 CSV:
fn main() -> Result<(), Box<dyn Error>> {
let mut reader = ReaderBuilder::new()
.has_headers(true)
.delimiter(b\',\')
.from_path(\"./data/timeseries.csv\")?;
for record in reader.deserialize::<Record>() {
let record: Record = record?;
println!(
\"date {}, value = {}\",
record.date.format(\"%Y-%m-%d\").to_string(),
record.value
);
}
Ok(())
}
但知道我坚持创建两个 ndarray Array 对象。有什么提示吗?
编辑:在本主题中将采用某种类似的方法(但不使用 ndarray):How to push data from a csv::StringRecord to each column vector in a struct?
标签: rust deserialization