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.8.tar.gz (69.7 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.8-cp314-cp314t-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.14tWindows x86-64

fastexcel_keye-0.20.8-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.8-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.8-cp314-cp314t-macosx_11_0_arm64.whl (2.9 MB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

fastexcel_keye-0.20.8-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.8-cp310-abi3-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.10+Windows x86-64

fastexcel_keye-0.20.8-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.8-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.8-cp310-abi3-macosx_11_0_arm64.whl (2.9 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

fastexcel_keye-0.20.8-cp310-abi3-macosx_10_12_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for fastexcel_keye-0.20.8.tar.gz
Algorithm Hash digest
SHA256 b7b7565b66f31e953888833ae93a0f2b1b74f22723f1be85349cf9fd70a73fab
MD5 22d3c420f4ed530b62c354531b78349a
BLAKE2b-256 2789adb24dbfefc08bf79718acb2469c2040653da4e94cb933eaccb7e7c226d8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastexcel_keye-0.20.8-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 dceb71f530eceb3b238f579ff58132548959b1313d94e03d450f111fa948fb2e
MD5 e83f785639590e4f734661c2081f2960
BLAKE2b-256 90bcbc6b255d72081a59c32894108e871c7cf9a836f9e5180d76e58a9ec133c5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastexcel_keye-0.20.8-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f882b4496235d3b7dcfbf762b1284f3892096d6f124dc462683c1c35db08a384
MD5 994c34d09a37b328cc66682c9e70bdd1
BLAKE2b-256 84d6d006fc9b37f20688f33c7313bfde24a3e9aef38a547b1ce2a6c53ed1f3eb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastexcel_keye-0.20.8-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ac9c91c312860ec1d77876029c47b070d182fd0e09207bcea52a4c20a58083c7
MD5 c2f5793c4f43763c59fdcccd89577a58
BLAKE2b-256 e933b207e5dbe3f3c00ae518324c5e4d907d66d3ac6a1c117bd97856624ca469

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastexcel_keye-0.20.8-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7913b2e65f54724e350a72a8489a47436f6af6a9b27d5205d46dc5cd46acc448
MD5 5b9b19cd40469cb555e67fca6bd16c5b
BLAKE2b-256 034177fc4b12af29358ce775ae1fe2a5df68a2a57b2015f195481ab9d6ac52e8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastexcel_keye-0.20.8-cp314-cp314t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e615853565114b062d65fa7e96d8b90537cca652f1cff819799e7cac22169a67
MD5 136fc00bbad09fa2654174b60f99c140
BLAKE2b-256 d5e71afa7d2b7afc81268134dac8f37ec9b8766f205c8a9b7c8993520f51c096

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastexcel_keye-0.20.8-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 7aa2bc28107908f22769a886ac24d03f20ff5263351b20ec6e9828783dd9304d
MD5 04e5d3fc315cf766d76761688860a6be
BLAKE2b-256 c4946019eb4bf1c636f5cb8d8ee0e1059561f45eb0d17e6ddf9673b0827b7b4b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastexcel_keye-0.20.8-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5f796fc398cffc5130f5e85fc4b76265422192edd59628749469b319644422ab
MD5 7edc205ef290f2fc6e11f2be758f5328
BLAKE2b-256 576cbaf99bcb68327aaee9de1fd7dfe671c5a465d69c28bdaed1ea18644e9515

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastexcel_keye-0.20.8-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a7afd6c831dda0ca05c7f7a69768135b6b89124b1e74842dba8424ac667fc94b
MD5 d295678abcb111849df7a3a9388194bf
BLAKE2b-256 3dfb21861b9c796a0d46b63f244053818bb808871538666b56b2900bf154aa3e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastexcel_keye-0.20.8-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 39f5da0d340e3a3c398b2b55b6e1a20b1654901b4d9bb772ee430ce3b2199ad4
MD5 28b04fb6160841c5eb8ac8a59d2d89e6
BLAKE2b-256 707dfccb51701cb6e0f38f1ef81d3faea720d036db6ba9f8f06654bd28483fdc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastexcel_keye-0.20.8-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 517fbfe5861422662f8559221db900cba3a1788cf85c468183c492978f6ede4e
MD5 337e0122da46b34810a2ed2f30bb4b5d
BLAKE2b-256 aed92f48188501f92a880378303b97cda796d29ee346823e6926437c624b6c38

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