gpt4 book ai didi

rust - 如何将数据从 csv::StringRecord 推送到结构中的每个列向量?

转载 作者:行者123 更新时间:2023-11-29 08:13:58 26 4
gpt4 key购买 nike

如何实现下面的push(&self, row: &csv::StringRecord) trait?

输入是对 rust-csv 库中的 csv::StringRecord 的引用。这个想法是将每一列附加到它的向量上。

extern crate csv;

#[derive(Debug)]
struct DataFrame {
header: csv::StringRecord,
name: Vec<String>,
datetime: Vec<String>,
speed: Vec<f32>,
}

impl DataFrame {
fn new() -> DataFrame {
DataFrame {
header: csv::StringRecord::new(),
name: Vec::new(),
datetime: Vec::new(),
speed: Vec::new(),
}
}

fn read_csv(filepath: &str, has_headers: bool) -> DataFrame {
// Open file
let file = std::fs::File::open(filepath).unwrap();
let mut rdr = csv::ReaderBuilder::new()
.has_headers(has_headers)
.from_reader(file);

// Add values to struct
let mut empty_dataframe = DataFrame::new();
empty_dataframe.header = rdr.headers().unwrap().clone();
for result in rdr.records() {
empty_dataframe.push(&result.unwrap());
}
empty_dataframe
}

fn push(&self, row: &csv::StringRecord) {
println!("{:?}", row);
//self.name.push(name);
//self.datetime.push(datetime);
//self.speed.push(speed);
}
}


fn main() {
let data = DataFrame::read_csv("src/data.csv", true);
println!("{:?}", data);
}

Cargo.toml 具有以下依赖项(版本很重要,因为 ReaderBuilder 仅在版本 1 之后可用。

[dependencies]
csv = "1.0.0-beta.5"

data.csv 格式如下:

>>> head src/data.csv
Name,DateTime,Speed
Tom,2016-01-04 09:30:00.038279090,102.44
Tom,2016-01-04 09:30:00.038279090,102.44

最佳答案

这应该可以完成工作,请注意没有进行任何错误处理,此代码仅用于演示目的。

获取所有 csv 数据并将名称字段推送到名称向量中;将日期时间字段插入日期时间向量并将速度插入速度,然后返回 DataFrame。

extern crate csv;

use std::error::Error;
use csv::StringRecord;

#[derive(Debug)]
struct DataFrame {
header: csv::StringRecord,
name: Vec<String>,
datetime: Vec<String>,
speed: Vec<f32>,
}


impl DataFrame {

fn new() -> DataFrame {
DataFrame {
header: csv::StringRecord::new(),
name: Vec::new(),
datetime: Vec::new(),
speed: Vec::new(),
}
}

fn read_csv(filepath: &str, has_headers: bool) -> DataFrame {
// Open file
let file = std::fs::File::open(filepath).unwrap();
let mut rdr = csv::ReaderBuilder::new()
.has_headers(has_headers)
.from_reader(file);

let mut data_frame = DataFrame::new();

// push all the records
for result in rdr.records().into_iter() {
let record = result.unwrap();
data_frame.push(&record);
}
return data_frame;
}

fn push(&mut self, row: &csv::StringRecord) {
// get name
self.name.push(row[0].to_string());
// get datetime
self.datetime.push(row[1].to_string());
// get speed
self.speed.push(row[2].parse().unwrap());
}
}


fn main() {
let data = DataFrame::read_csv("path to file", true);

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

关于rust - 如何将数据从 csv::StringRecord 推送到结构中的每个列向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50246958/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com