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.9.tar.gz (71.1 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.9-cp314-cp314t-win_amd64.whl (3.2 MB view details)

Uploaded CPython 3.14tWindows x86-64

fastexcel_keye-0.20.9-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.8 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64

fastexcel_keye-0.20.9-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.6 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64

fastexcel_keye-0.20.9-cp314-cp314t-macosx_11_0_arm64.whl (3.3 MB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

fastexcel_keye-0.20.9-cp314-cp314t-macosx_10_12_x86_64.whl (3.4 MB view details)

Uploaded CPython 3.14tmacOS 10.12+ x86-64

fastexcel_keye-0.20.9-cp310-abi3-win_amd64.whl (3.3 MB view details)

Uploaded CPython 3.10+Windows x86-64

fastexcel_keye-0.20.9-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.8 MB view details)

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

fastexcel_keye-0.20.9-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.6 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

fastexcel_keye-0.20.9-cp310-abi3-macosx_11_0_arm64.whl (3.3 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

fastexcel_keye-0.20.9-cp310-abi3-macosx_10_12_x86_64.whl (3.4 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for fastexcel_keye-0.20.9.tar.gz
Algorithm Hash digest
SHA256 a2bf78b4c609c25b0903ed74d05754efd02550bb5bfe548ffdba5528db316369
MD5 f84b165bdfc015abb93b16b42b0eaf06
BLAKE2b-256 750bd36bd35cbe84be629b5ba1118c58efc3149bbd9b7969aa621c046b8949ef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastexcel_keye-0.20.9-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 09dd88ff83d384bca3a452951dd16d31641a84dccd78b643ee315afc5b657d19
MD5 0af7e496129c85a5af7dd0cfdbb76d01
BLAKE2b-256 29d7f5213ffc38f0b514da11edf313fae675ab74aa91542d890a27ada9e89cf2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastexcel_keye-0.20.9-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c8b52ecbaaae516747f5af769d5910e4d51c78356ebed868575b4a4a1d7422d3
MD5 d6b0b911a2c80a3d679781afb7762a36
BLAKE2b-256 deb45e88e3df3b1590cc36ddbacfcdb89d6b0637f0bda521dfe2c9e51bcd5edb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastexcel_keye-0.20.9-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b2b1b238e5a1626293e9db29da28beffd6723b3e49c12215b11555f773ab8c64
MD5 d0eb0624c8832d7a4314e463a94de2fb
BLAKE2b-256 1839b912feffad87b40bcdccfda092e84fb2a5ff6316439eebfe9dcee0df83ec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastexcel_keye-0.20.9-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 15f74e72cfaa6a6cae9143fddc6af3340eb5ee5c594ffcb5b1a88ecd69fec029
MD5 650364c678a4ecf401d5a696f5f1bc88
BLAKE2b-256 c2d1408585ae83c5cfa0562348eb29d9beb1eebd886c42a62348a4a591cf7bfe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastexcel_keye-0.20.9-cp314-cp314t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 bfc44dd2b1d4136845b5d7c2cd93b21d004582e740a3d6bdb5d9dfe54c2dc564
MD5 0cbc222f8758d67704e03d34433ae6dd
BLAKE2b-256 e0f65cfb628d9393eb163d08a1b3eb558fb2a49becdab7859229bc8a61444142

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastexcel_keye-0.20.9-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 2118fad4045312fe2d4c489da37818baa1aa9d3bcdc1db8e26814888fc465bb7
MD5 92f2487e7eb9a65d20e7cf8a1b673477
BLAKE2b-256 676e7d7c83ca9d37d34fcf30e8c7ba8b56f7bce4cfea0fb6bda796e609342bac

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastexcel_keye-0.20.9-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bb6fcf738078132cb99d3b614bc3226a65207e0d31ee642dce8f47f45e875b53
MD5 b976a0b5dd57a99e97ca5147aa9529c7
BLAKE2b-256 1ce021a35656a9fa3d932c92f6d571bb33d1d94e3dbbd1c500086cacb33c4874

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastexcel_keye-0.20.9-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 720786a56e2075fcad15a42eaf1ba0d34207f23fbca02f278166392929f3bdca
MD5 b3c1a47434afb8810db6f5844d1d7d1f
BLAKE2b-256 02b41c96f69a78352b8e3dd67c49cada87711abb09f8924a8e2f4634c60df2f2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastexcel_keye-0.20.9-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5ac96ed49b51735fdad3bbbb8dd7ff9f32a7ff5bdeda9bb6c4bd0f72d905cbce
MD5 c8c7d2e93ecf59c1e2875bdddf013443
BLAKE2b-256 3f55d4d01fc4627b526a47913056b6e3ca9554a78ed0731dbbc0b6d1da3322ef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastexcel_keye-0.20.9-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 b05c61bf64a0b95c7863f9b42e4fc0e9f589348f6b95d00e0ff5d18c3bba9726
MD5 126f73197c5116df517202c613a05fb1
BLAKE2b-256 94162edff986fe8429647cb2e29e661a61691bd9afaea349ab7fa591091ad52c

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