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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!