#polars #excel #xlsx

polars_excel_writer

A Polars extension to serialize dataframes to Excel xlsx files

9 breaking releases

new 0.10.0 Jan 5, 2025
0.9.0 Sep 17, 2024
0.8.0 Aug 24, 2024
0.7.0 Feb 25, 2024
0.4.0 Nov 22, 2023

#562 in Encoding

Download history 172/week @ 2024-09-17 41/week @ 2024-09-24 67/week @ 2024-10-01 109/week @ 2024-10-08 124/week @ 2024-10-15 209/week @ 2024-10-22 591/week @ 2024-10-29 692/week @ 2024-11-05 535/week @ 2024-11-12 464/week @ 2024-11-19 824/week @ 2024-11-26 576/week @ 2024-12-03 663/week @ 2024-12-10 455/week @ 2024-12-17 142/week @ 2024-12-24 314/week @ 2024-12-31

1,678 downloads per month

MIT/Apache

98KB
400 lines

polars_excel_writer

The polars_excel_writer crate is a library for serializing Polars dataframes to Excel Xlsx files.

It provides a primary interface PolarsXlsxWriter which is a configurable Excel serializer that resembles the interface options provided by the Polars write_excel() dataframe method.

It also provides a secondary ExcelWriter interface which is a simpler Excel serializer that implements the Polars SerWriter trait to write a dataframe to an Excel Xlsx file. However, unless you have existing code that uses the SerWriter trait you should use the PolarsXlsxWriter interface.

Unless you have existing code that uses the Polars SerWriter trait you should use the primary PolarsXlsxWriter interface.

This crate uses rust_xlsxwriter to do the Excel serialization.

Example

An example of writing a Polar Rust dataframe to an Excel file using the PolarsXlsxWriter interface.

use chrono::prelude::*;
use polars::prelude::*;

use polars_excel_writer::PolarsXlsxWriter;

fn main() -> PolarsResult<()> {
    // Create a sample dataframe for the example.
    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(),
        ],
    )?;

    // Create a new Excel writer.
    let mut xlsx_writer = PolarsXlsxWriter::new();

    // Write the dataframe to Excel.
    xlsx_writer.write_dataframe(&df)?;

    // Save the file to disk.
    xlsx_writer.save("dataframe.xlsx")?;

    Ok(())
}

Output file:

See also

  • Changelog: Recent additions and fixes.
  • Performance: Performance comparison with Python based methods.

Dependencies

~26–36MB
~593K SLoC