如何阅读所有列作为字符串与极点在生 rust ?这是我的准则let df = CsvReader::from_path(filecsv)?.has_header(true).finish()?; Ok(df)它以int64的形式读取一些数据,但我想以字符串的形式读取所有列(无论何时调用它们)。我该怎么做?
let df = CsvReader::from_path(filecsv)?.has_header(true).finish()?; Ok(df)
yzuktlbb1#
这是我的解决方案,它只能将一些(不是所有)字段转换为str,您需要添加smartstring crate。
str
smartstring
use polars::datatypes::DataType::Utf8; use polars::prelude::*; use smartstring::SmartString; use std::sync::Arc; fn main() { let mut schema = Schema::new(); schema.with_column(SmartString::from("some_columns"), Utf8); let df_csv = CsvReader::from_path("some_input.csv") .unwrap() .infer_schema(None) .has_header(true) .with_dtypes(Some(Arc::new(schema))) .finish() .unwrap(); println!("{}", df_csv); }
=================================================经过进一步的实验,我找到了另一种方法。这需要使用csv机箱。首先,您需要使用rdr.headers()读取CSV headers并将它们Map到迭代器中。然后,使用from_iter创建模式。
csv
rdr.headers()
CSV headers
from_iter
use polars::datatypes::DataType::Utf8; use polars::prelude::*; use std::sync::Arc; fn main() { let mut rdr = csv::Reader::from_path("some_input.csv").unwrap(); let column_names = rdr.headers().unwrap().iter().map(|item| Field::new(item,Utf8)); let schema = Schema::from_iter(column_names); let df_csv = CsvReader::from_path("some_input.csv") .unwrap() .infer_schema(None) .has_header(true) .with_dtypes(Some(Arc::new(schema))) .finish() .unwrap(); println!("{}", df_csv); }
这种方法的缺点是它需要阅读文件两次,效率很低。不幸的是,目前我还没有找到一个合适的API来避免这个限制。也许有更好的解决方案……?
1条答案
按热度按时间yzuktlbb1#
这是我的解决方案,它只能将一些(不是所有)字段转换为
str
,您需要添加smartstring
crate。=================================================
经过进一步的实验,我找到了另一种方法。这需要使用
csv
机箱。首先,您需要使用rdr.headers()
读取CSV headers
并将它们Map到迭代器中。然后,使用from_iter
创建模式。这种方法的缺点是它需要阅读文件两次,效率很低。不幸的是,目前我还没有找到一个合适的API来避免这个限制。
也许有更好的解决方案……?