Skip to main content

A fast excel file reader for Python, written in Rust (fork with style support)

Project description

fastexcel

A fast excel file reader for Python and Rust.

Docs:

Stability

The Python library is considered production-ready. The API is mostly stable, and we avoid breaking changes as much as possible. v1.0.0 will be released once the milestone is reached.

⚠️ The free-threaded build is still considered experimental

The Rust crate is still experimental, and breaking changes are to be expected.

Installation

# Lightweight installation (no PyArrow dependency)
pip install fastexcel

# With Polars support only (no PyArrow needed)
pip install fastexcel[polars]

# With Pandas support (includes PyArrow)
pip install fastexcel[pandas]

# With PyArrow support
pip install fastexcel[pyarrow]

# With all integrations
pip install fastexcel[pandas,polars]

Quick Start

Modern usage (recommended)

FastExcel supports the Arrow PyCapsule Interface for zero-copy data exchange with libraries like Polars, without requiring pyarrow as a dependency. Use fastexcel with any Arrow-compatible library without requiring pyarrow.

import fastexcel

# Load an Excel file
reader = fastexcel.read_excel("data.xlsx")
sheet = reader.load_sheet(0)  # Load first sheet

# Use with Polars (zero-copy, no pyarrow needed)
import polars as pl
df = pl.DataFrame(sheet)  # Direct PyCapsule interface
print(df)

# Or use the to_polars() method (also via PyCapsule)
df = sheet.to_polars()
print(df)

# Or access the raw Arrow data via PyCapsule interface
schema = sheet.__arrow_c_schema__()
array_data = sheet.__arrow_c_array__()

Traditional usage (with pandas/pyarrow)

import fastexcel

reader = fastexcel.read_excel("data.xlsx")
sheet = reader.load_sheet(0)

# Convert to pandas (requires `pandas` extra)
df = sheet.to_pandas()

# Or get pyarrow RecordBatch directly
record_batch = sheet.to_arrow()

Working with tables

reader = fastexcel.read_excel("data.xlsx")

# List available tables
tables = reader.table_names()
print(f"Available tables: {tables}")

# Load a specific table
table = reader.load_table("MyTable")
df = pl.DataFrame(table)  # Zero-copy via PyCapsule, no pyarrow needed

Key Features

  • Zero-copy data exchange via Arrow PyCapsule Interface
  • Flexible dependencies - use with Polars (no PyArrow needed) or Pandas (includes PyArrow)
  • Seamless Polars integration - pl.DataFrame(sheet) and sheet.to_polars() work without PyArrow via PyCapsule interface
  • High performance - written in Rust with calamine and Apache Arrow
  • Memory efficient - lazy loading and optional eager evaluation
  • Type safety - automatic type inference with manual override options

Contributing & Development

Prerequisites

You'll need:

  1. Rust - Rust stable or nightly
  2. uv - Fast Python package manager (will install Python 3.10+ automatically)
  3. git - For version control
  4. make - For running development commands

Python Version Management: uv handles Python installation automatically. To use a specific Python version:

uv python install 3.13  # Install Python 3.13
uv python pin 3.13      # Pin project to Python 3.13

Quick Start

# Clone the repository (or from your fork)
git clone https://github.com/ToucanToco/fastexcel.git
cd fastexcel

# First-time setup: install dependencies, build debug version, and setup pre-commit hooks
make setup-dev

Verify your installation by running:

make

This runs a full development cycle: formatting, building, linting, and testing

Development Commands

Run make help to see all available commands, or use these common ones:

make all          # full dev cycle: format, build, lint, test
make install      # install with debug build (daily development)
make install-prod # install with release build (benchmarking)
make test         # to run the tests
make lint         # to run the linter
make format       # to format python and rust code
make doc-serve    # to serve the documentation locally

Useful Resources

Benchmarking

For benchmarking, use make benchmarks which automatically builds an optimised wheel. This is required for profiling, as dev mode builds are much slower.

Speed benchmarks

make benchmarks

Memory profiling

mprof run -T 0.01 python python/tests/benchmarks/memory.py python/tests/benchmarks/fixtures/plain_data.xls

Creating a release

  1. Create a PR containing a commit that only updates the version in Cargo.toml.
  2. Once it is approved, squash and merge it into main.
  3. Tag the squashed commit, and push it.
  4. The release GitHub action will take care of the rest.

Dev tips

  • Use cargo check to verify that your rust code compiles, no need to go through maturin every time
  • cargo clippy = 💖
  • Careful with arrow constructors, they tend to allocate a lot
  • mprof and time go a long way for perf checks, no need to go fancy right from the start

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fastexcel_keye-0.20.6.tar.gz (68.3 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

fastexcel_keye-0.20.6-cp314-cp314t-win_amd64.whl (2.9 MB view details)

Uploaded CPython 3.14tWindows x86-64

fastexcel_keye-0.20.6-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.4 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64

fastexcel_keye-0.20.6-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.3 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64

fastexcel_keye-0.20.6-cp314-cp314t-macosx_11_0_arm64.whl (2.9 MB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

fastexcel_keye-0.20.6-cp314-cp314t-macosx_10_12_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.14tmacOS 10.12+ x86-64

fastexcel_keye-0.20.6-cp310-abi3-win_amd64.whl (2.9 MB view details)

Uploaded CPython 3.10+Windows x86-64

fastexcel_keye-0.20.6-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.4 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ x86-64

fastexcel_keye-0.20.6-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.3 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

fastexcel_keye-0.20.6-cp310-abi3-macosx_11_0_arm64.whl (2.9 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

fastexcel_keye-0.20.6-cp310-abi3-macosx_10_12_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

Details for the file fastexcel_keye-0.20.6.tar.gz.

File metadata

  • Download URL: fastexcel_keye-0.20.6.tar.gz
  • Upload date:
  • Size: 68.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.11.5

File hashes

Hashes for fastexcel_keye-0.20.6.tar.gz
Algorithm Hash digest
SHA256 0797852ec019b9e596cf48ff222b1a7fd863c77bf50fa83463244d20d526652f
MD5 0ac3a3433eabfe0918df8e1fbb373281
BLAKE2b-256 7060b0424c75f30eb7922f3cb30e1a21dc2a8aeedbb6fec613e6173ff1a2413f

See more details on using hashes here.

File details

Details for the file fastexcel_keye-0.20.6-cp314-cp314t-win_amd64.whl.

File metadata

File hashes

Hashes for fastexcel_keye-0.20.6-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 61b942305189d5380baa270c9fec518883b70584175d614706eaf213e364f367
MD5 d8e389f1083555774b904cd537db9456
BLAKE2b-256 7291985d68d3caca9a3b7394388f7fd7f0b9fbcd03484f5427051017e0cfbd7a

See more details on using hashes here.

File details

Details for the file fastexcel_keye-0.20.6-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fastexcel_keye-0.20.6-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a784b88d95e669774b94278b8ca61fe47e39788a426669999cda5ea000db937e
MD5 de6d2d89a1d285c082fa930da9ada7d4
BLAKE2b-256 97f67dfde6ea0ba953f13f5823fd5e16a544da55c9b95ce0f71d6bda4b7af464

See more details on using hashes here.

File details

Details for the file fastexcel_keye-0.20.6-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for fastexcel_keye-0.20.6-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 52f1af40da9ecc8a8eace8c9186c8c01cf3063ee7262ea21437169ec4d0e41ba
MD5 c054b6762ff25836c6dfd0b951650600
BLAKE2b-256 56cacea62c6b76d4787ede7e34945dcbc504c862b8add2ae3b771b058f8bbe28

See more details on using hashes here.

File details

Details for the file fastexcel_keye-0.20.6-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for fastexcel_keye-0.20.6-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a1f1caff236c882e872ce2365047e206a7b6f7bb10d5410e319db28d4d3dd247
MD5 6bb4c12bdc775156d8be64b8d70f4e09
BLAKE2b-256 4e21c5d177a66e13b7cab4089873d2cb31275c1bb410ed4988f3892f21d93cf7

See more details on using hashes here.

File details

Details for the file fastexcel_keye-0.20.6-cp314-cp314t-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for fastexcel_keye-0.20.6-cp314-cp314t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 5b34ce51c3eb16f5dd27126e9acfbcd118ec67c789be62d7c82b70163752d626
MD5 d0f2e6da21b350a65e011c7df397f581
BLAKE2b-256 79537c913e28ff8693c0b61fe2973e7d80323769d4eb6e860fe4f89a2f32824d

See more details on using hashes here.

File details

Details for the file fastexcel_keye-0.20.6-cp310-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for fastexcel_keye-0.20.6-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 56bed5ddc019a7e34339b02d61e54badb5f640c399e6fcc0907a4a01976129c5
MD5 1c79165c94e094db73069e46750fec38
BLAKE2b-256 1abccf77b8b1f441954211c9ef2f05a6444dd463445ecde8e6ccf554b1a9e56f

See more details on using hashes here.

File details

Details for the file fastexcel_keye-0.20.6-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fastexcel_keye-0.20.6-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2d5e269b3b61f42cbc853d801e917d626af4db773ec5803371409d8502586166
MD5 4aa0de955a720176aad7e6f8f9537c4b
BLAKE2b-256 0118170dd65610461de199c9da490c10bc0d52b48f34963dcced54d0716d0f83

See more details on using hashes here.

File details

Details for the file fastexcel_keye-0.20.6-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for fastexcel_keye-0.20.6-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5c882fa3d8d314c8db2a14ebb3afc5723fce5d4f31e7f5d5ff969397b30a9f66
MD5 59062c8194ed2d80501a0e0bfa97576d
BLAKE2b-256 e46992ccfc67563376b98b5e7106bb30cca85e949101959a521f18ef6795f44a

See more details on using hashes here.

File details

Details for the file fastexcel_keye-0.20.6-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for fastexcel_keye-0.20.6-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2c6a4faba218906a14f2e6321201297c980bd8ad4b043ef2a0ba3fe88606c1d8
MD5 23f9a4fec5ebe2679dcaedc933d9ac93
BLAKE2b-256 2b723db97a0e2d623130d2241fae531d337428d41a2e031a8145747471acf66c

See more details on using hashes here.

File details

Details for the file fastexcel_keye-0.20.6-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for fastexcel_keye-0.20.6-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 11c1a2a0152fd26b183572c0f1a8538b39b489b190f4ae2c2865c304240802c7
MD5 774adef00ae8771d49d9831610d376b5
BLAKE2b-256 bba6709a91ef50994c0b85d671ea2648506db9a5c91add4c1817a6a9cf411c17

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page