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.5.tar.gz (68.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.5-cp314-cp314t-win_amd64.whl (2.9 MB view details)

Uploaded CPython 3.14tWindows x86-64

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

Uploaded CPython 3.14tmacOS 11.0+ ARM64

fastexcel_keye-0.20.5-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.5-cp310-abi3-win_amd64.whl (2.9 MB view details)

Uploaded CPython 3.10+Windows x86-64

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

Uploaded CPython 3.10+macOS 11.0+ ARM64

fastexcel_keye-0.20.5-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.5.tar.gz.

File metadata

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

File hashes

Hashes for fastexcel_keye-0.20.5.tar.gz
Algorithm Hash digest
SHA256 f7b67b86fe2fa239092f57b00c253636ddb00ac749a8f695eb0739fb04e4ed4c
MD5 f92435f1374c1eb52d175e7df0a725ab
BLAKE2b-256 e14a90c81cde11301a15ccdcecc1599609bbd3bdbf03165feb8e8ebf441d302e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastexcel_keye-0.20.5-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 e953917ec05969bd17fe9544fbf03622e9929bf740e53d7eff44a289c4a66669
MD5 6a62368de804f94af840e87f20c83b7c
BLAKE2b-256 2923de2df5d6de658bf88ca8a157989740a08c512edbcec7c4f7c6c9c3249527

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastexcel_keye-0.20.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f8ed93536a334669e6c684ba9ed18a4c318e2d5d17ac7478a5da4431a7aaf340
MD5 6aac6ad2737aaf891cfec8aedde27b04
BLAKE2b-256 abcf451643f5268c13423808029cb3241659fe1e40b08132f242353b311f9757

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastexcel_keye-0.20.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 aee1161f45a4c7c2e9364dd4a7da5e0acefde3085ec8175068a2bd39a440b2e5
MD5 a2f8e6c912c4639ddae8c8e0b81fa41f
BLAKE2b-256 2bc6487c781ed723dd7b7ce8945df517fd11f5cc04e48c2f50bc34332af1431c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastexcel_keye-0.20.5-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c7706d58ae64882cae148be437981480318f599c53b2fa91720bf2076358d38c
MD5 8a196772021cfe3ae29148f491da2fa7
BLAKE2b-256 d9ae4509dcd8f6dc77775e5f0846e2b9d730ff43c0c357fa897855128d56d467

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastexcel_keye-0.20.5-cp314-cp314t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 8966c6dd73968ef9f3c85397c8d08c3475e7cfd778b880eea676c027f71d95a1
MD5 90cd02971199064dd0c5cc5054eab8d2
BLAKE2b-256 1bb4ee9521c035f1a941d6c48746fd767008bb0e2971909014c69d42948bddb9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastexcel_keye-0.20.5-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 8ffeadd177b935cc7dbf564ce6cb84a070acffab9c42afb029a8f168b2cd894d
MD5 72a4a43bc6a2d9ae97023116e251fcfc
BLAKE2b-256 6bb4a86c998dddd0018227b41dcd32593b758c1d16c0a337c988e31bbb95f6df

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastexcel_keye-0.20.5-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0ef2c9410ffbac46c0c5d1b5773bd195f4d40869476fda49bea4874387e63112
MD5 6c9bb2fe6e3a613649ce8794def33bc3
BLAKE2b-256 9c0e116be80bd1107f11f655dd24e621d6ce17a00666e439edcd884045f4671b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastexcel_keye-0.20.5-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 53791cd13f8cef3b5c711a5603952ce11a13c597e2dbb02c88d794c6b5409672
MD5 13771ea76c8482e982ccfc6acdaa376a
BLAKE2b-256 b560433c77cf4cce95b942225eac086f91a5cca7eabe8a4cc899c8fe0f2b62fd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastexcel_keye-0.20.5-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7e1ed396c79411367b360655624c7c0fe9c470249f33af8c3cef1d1d130c1009
MD5 e4bd9afc607aa4746113506973ca77eb
BLAKE2b-256 9faae64a69b4890fda8d9e3d170883f5841b37a3d368a5a3734844b2a2688ad6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastexcel_keye-0.20.5-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 bb3d3a18826e54cd80a8da88de6a7304ffe3f0c13a7ff245c355a2cf6612a987
MD5 85ff2b923b61fde04fbdc74ecf5a4e59
BLAKE2b-256 e019d5dec16afa8ab91ef6f836383563d97169efddadfac171fca3c1dee35d4b

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