Excel2df 直接读取excel文件(.xlsx),返回DataFrame
目前Rust处理excel文件时,通常使用calamine读取,然后实例化成Vec,再做数据分析。而目前Rust做数据分析的库是Polars,可以将Vec转成DataFrame。但需要多步转换,不够直观。为了让Polars能直接读取,特写了一个操作库 excel2df,可以在crates.io直接下载。目前20万行,50列数据,单线程耗时4.7秒,多线程可以压缩到2.7秒。当然机器是两年前的办公本,数据读取速度可以媲美Calamine。
单线程读取
use excel2df::Workbook;
let mut wb = Workbook::open("./test.xlsx").unwrap();
let range = wb.get_sheet_range("Sheet1");
let df = range.to_dataframe(0);
println!("{:?}", df);
多线程读取
fn main(){
let mut wb = Workbook::new("./sale.xlsx").unwrap();
wb.set_threads_num(6);//set threads num
let start = Instant::now();
let range = wb.get_sheet_range2("Sheet1");
let df = range.to_dataframe(10);
let duration = start.elapsed();
println!("Runing time: {:?}", duration);
println!("Runing: {} miliSeconds", duration.as_millis());
println!("{:?}",df)
}
直接访问polars 0.45.1
use excel2df::polars::prelude::*;
let mut wb = Workbook::new("./sale.xlsx").unwrap();
wb.set_threads_num(6);
let range = wb.get_sheet_range2("Sheet1");
let mut df = range.to_dataframe(10)
df = df.lazy().select(
[
col("员工姓名"),
col("产品名称"),
col("委托金额"),
]
).collect().unwrap();
println!("{}",df);
本作品采用《CC 协议》,转载必须注明作者和本文链接