polars_excel_writer
The polars_excel_writer
crate is a library for serializing Polars dataframes
to Excel Xlsx files.
The crate uses rust_xlsxwriter
to do the Excel serialization and is
typically 5x faster than Polars when exporting large dataframes to Excel.
It provides a primary interface PolarsExcelWriter
which is a configurable
Excel serializer that resembles the interface options provided by the Polars
write_excel()
dataframe method.
Example
An example of writing a Polar Rust dataframe to an Excel file using the
PolarsExcelWriter
interface.
use chrono::prelude::*;
use polars::prelude::*;
use polars_excel_writer::PolarsExcelWriter;
fn main() -> PolarsResult<()> {
let df: DataFrame = df!(
"String" => &["North", "South", "East", "West"],
"Integer" => &[1, 2, 3, 4],
"Float" => &[4.0, 5.0, 6.0, 7.0],
"Time" => &[
NaiveTime::from_hms_milli_opt(2, 59, 3, 456).unwrap(),
NaiveTime::from_hms_milli_opt(2, 59, 3, 456).unwrap(),
NaiveTime::from_hms_milli_opt(2, 59, 3, 456).unwrap(),
NaiveTime::from_hms_milli_opt(2, 59, 3, 456).unwrap(),
],
"Date" => &[
NaiveDate::from_ymd_opt(2022, 1, 1).unwrap(),
NaiveDate::from_ymd_opt(2022, 1, 2).unwrap(),
NaiveDate::from_ymd_opt(2022, 1, 3).unwrap(),
NaiveDate::from_ymd_opt(2022, 1, 4).unwrap(),
],
"Datetime" => &[
NaiveDate::from_ymd_opt(2022, 1, 1).unwrap().and_hms_opt(1, 0, 0).unwrap(),
NaiveDate::from_ymd_opt(2022, 1, 2).unwrap().and_hms_opt(2, 0, 0).unwrap(),
NaiveDate::from_ymd_opt(2022, 1, 3).unwrap().and_hms_opt(3, 0, 0).unwrap(),
NaiveDate::from_ymd_opt(2022, 1, 4).unwrap().and_hms_opt(4, 0, 0).unwrap(),
],
)?;
let mut excel_writer = PolarsExcelWriter::new();
excel_writer.write_dataframe(&df)?;
excel_writer.save("dataframe.xlsx")?;
Ok(())
}
Output file:
Performance
The table below shows the performance of writing a dataframe using Python
Polars, Python Pandas and PolarsExcelWriter
.
Test Case |
Time (s) |
Relative (%) |
Polars |
6.49 |
100% |
Pandas |
10.92 |
168% |
polars_excel_writer |
1.22 |
19% |
polars_excel_writer + zlib |
1.08 |
17% |
See the Performance section of the docs for more detail.
See also