fast-feature-transform
Feature preprocessing for machine learning, written in C++ with a Python API. Fit a pipeline on Parquet files, save it, then transform one record at a time when serving or whole files when training.
- Feature parity with category_encoders and scikit-learn's preprocessors.
- Fast: one record takes 0.13 to 1.2 µs, where scikit-learn takes 32 to 219 µs and category_encoders 0.31 to 1.2 ms.
- Out-of-core execution: Parquet is read in batches, and fits that need every value spill to disk.
Install
pip install fast-feature-transform
Wheels cover CPython 3.14, standard and free-threaded (python3.14t), on Linux x86_64 and arm64 (glibc 2.28 or
later) and on macOS 26 or later on Apple silicon. Elsewhere, build from source as Development
describes.
Usage
from fast_feature_transform import OrdinalEncoder, Pipeline, StandardScaler
pipeline = Pipeline(
[
("country", OrdinalEncoder(columns=["country"])),
("numbers", StandardScaler(columns=["age", "income"])),
]
).fit(["train.parquet"])
pipeline.transform_dict({"country": "CA", "age": 42, "income": 75000.0}) # serving: one record
pipeline.transform_parquet(["train.parquet"], output_dir="train-features") # batches: Parquet in, Parquet out
pipeline.transform_memmap(["train.parquet"], output_dir="train-mmap") # training: one packed file for NumPy
pipeline.save("artifacts/preprocessing")
serving = Pipeline.load("artifacts/preprocessing")
Transform latency
Time to transform one record (a dict in, a dict out) and batches of 100,000 and 1,000,000 rows, after fitting on
100,000 rows. For one record, category_encoders and scikit-learn also pay to build their DataFrame or array and to
turn the result back into a dict. A batch goes from one Parquet file to another on both sides. This package reads
the file's strings as stored, a dictionary of distinct values plus an index per row; category_encoders and
scikit-learn read the file with pyarrow into pandas or NumPy, transform it, and write the result with this package's
Parquet settings. Medians of seven rounds on an Apple M4, one thread; lower is better.
At a million rows scikit-learn took 1.14 to 5.3 times as long and category_encoders 1.2 to 30 times. Reading and
writing Parquet adds time on both sides, which narrows the gap where the transform is cheap or its output wide; it
stays widest where the other library's transform is slow. Matching names don't always mean matching behavior:
categories are sorted, output types are fixed at fit, and PolynomialEncoder differs from category_encoders by about
1e-5 at 32 categories and by more than 0.5 from 40 to 128, because category_encoders' basis is the less accurate one.
License
MIT. The wheels also contain Apache Arrow and the other libraries that THIRD_PARTY_NOTICES.txt lists, and code adapted from SciPy, each under its own license.
Metadata
Release files for fast-feature-transform 0.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
Total release size: 34.9 MB
Release files / fast_feature_transform-0.0.1-cp314-cp314t-manylinux_2_28_x86_64.whl
| Download URL | fast_feature_transform-0.0.1-cp314-cp314t-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 7.1 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
c682e3d2550ec04404302e420022654676d0dc04a08ab524f75ca3a9cf38ce8e
|
|
BLAKE2b-256 checksum How to use checksums |
b32471057ba7e7f83769c75043ea24539bea2af83e460627443b0c08e523e837
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.
Transparency logRelease files / fast_feature_transform-0.0.1-cp314-cp314t-manylinux_2_28_aarch64.whl
| Download URL | fast_feature_transform-0.0.1-cp314-cp314t-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 6.3 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
0b945ee5d9e8d59e928d0af849d94372d4bdacf7aae92ea4d0e3032671f22bbe
|
|
BLAKE2b-256 checksum How to use checksums |
4c4f0f7e61c14bdda6fe8a4b267ae07a26f8adde17afe0cd27338252604bdee0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.
Transparency logRelease files / fast_feature_transform-0.0.1-cp314-cp314t-macosx_26_0_arm64.whl
| Download URL | fast_feature_transform-0.0.1-cp314-cp314t-macosx_26_0_arm64.whl |
|---|---|
| Size | 4.1 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 26.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
1016a9addca6f955f7d412f074ff5c9eff6e2d85a7fc404c3163207ca83de210
|
|
BLAKE2b-256 checksum How to use checksums |
802d703ff2fbde24aa91803f946e9f6d264df557b1112291bd7b55689b3d6541
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.
Transparency logRelease files / fast_feature_transform-0.0.1-cp314-cp314-manylinux_2_28_x86_64.whl
| Download URL | fast_feature_transform-0.0.1-cp314-cp314-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 7.0 MB |
| Tags | CPython 3.14 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
1ae009f7267b192e59650f740e3239f5de224be4dde4ee19433ba0632e17b939
|
|
BLAKE2b-256 checksum How to use checksums |
05957a783e31df68a57f1aa8b29e009ef892f83a0fdd2e62028417be647c08db
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.
Transparency logRelease files / fast_feature_transform-0.0.1-cp314-cp314-manylinux_2_28_aarch64.whl
| Download URL | fast_feature_transform-0.0.1-cp314-cp314-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 6.3 MB |
| Tags | CPython 3.14 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
d2abf54d5dac15bcef0c2314a1a7f74c3d4418188133f99d7bd274a7ff4579eb
|
|
BLAKE2b-256 checksum How to use checksums |
1802681fabe072c0c468f86c26bd108dfc7a25529c4bd883bd9aa1b64bc44934
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.
Transparency logRelease files / fast_feature_transform-0.0.1-cp314-cp314-macosx_26_0_arm64.whl
| Download URL | fast_feature_transform-0.0.1-cp314-cp314-macosx_26_0_arm64.whl |
|---|---|
| Size | 4.1 MB |
| Tags | CPython 3.14 macOS 26.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
d08bc61bdf26db91a7ffe1068309c5f31659c86c82531b48ee7c6dd620d2e7bd
|
|
BLAKE2b-256 checksum How to use checksums |
6fd8d9785c4b4754f6efd1e77cef69ec5192bfb6fe39d9e44ff5ea7b44c34496
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.
Transparency logSecurity for fast-feature-transform 0.0.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 6 files in this release have been uploaded with provenance metadata.
Attestation for fast_feature_transform-0.0.1-cp314-cp314t-manylinux_2_28_x86_64.whl
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.