On this page
Fix pandas read_parquet: Unable to Find a Usable Engine
The error
ImportError: Unable to find a usable engine; tried using: 'pyarrow', 'fastparquet'.
A suitable version of pyarrow or fastparquet is required for parquet support.
Trying to import the above resulted in these errors:
- Missing optional dependency 'pyarrow'. pyarrow is required for parquet support.
- Missing optional dependency 'fastparquet'. fastparquet is required for parquet support.
pandas cannot read Parquet by itself. pd.read_parquet and df.to_parquet
are thin wrappers that hand the work to pyarrow or fastparquet. This
error means neither import succeeded — it says nothing about your file.
Read the lines after "resulted in these errors" before doing anything else. They contain the real failure for each engine, and that is what decides which fix below applies.
Fix 1: install into the right interpreter
The common case is a plain missing dependency:
python -m pip install pyarrow
python -c "import pandas, pyarrow; print(pandas.__version__, pyarrow.__version__)"
Use python -m pip, not bare pip. A bare pip on PATH frequently
belongs to a different environment than the python that runs your script,
which is why "I already installed it" is the most common follow-up. With uv:
uv add pyarrow # project
uv pip install pyarrow # active venv
In a notebook, confirm the kernel first:
import sys; print(sys.executable)
If that path is not your project venv, switch the kernel — installing again will not help.
Fix 2: the import failed for a different reason
If the error tail shows something other than Missing optional dependency —
a DLL load failed, a version conflict, or a build error — pyarrow is
present but broken. Two frequent causes:
- No wheel for your Python version or platform. Just-released Python
minors, musl-based images (Alpine), and unusual architectures may have no
prebuilt wheel, so pip tries a source build and fails. Force the issue to
surface with
pip install --only-binary=:all: pyarrow, then either pin to a Python version that has wheels or switch base image. - A pyarrow too old for your pandas. pandas enforces a minimum version
and reports the same "usable engine" message.
python -m pip install -U pyarrowresolves it.
Mixing conda and pip installs of pyarrow in one environment also produces broken imports; keep to one installer.
Fix 3: pick the engine explicitly
Since pandas 2.0, pyarrow is the default when installed. If you must use the other engine — typically because no pyarrow wheel exists — install it and say so:
df = pd.read_parquet("data.parquet", engine="fastparquet")
Expect gaps: fastparquet handles plain columnar data well but struggles with nested structs and newer logical types. The trade-offs are covered in fastparquet vs pyarrow.
Skip the engine entirely
If you only need to inspect the file, no Python engine is required at all. DuckDB reads Parquet natively:
duckdb -c "SELECT * FROM 'data.parquet' LIMIT 20"
Or open the file in the Parquet Viewer to see schema, types and a row sample, run aggregates in the SQL Workbench, or export it with the Parquet to CSV converter. These run locally in the browser on WebAssembly — no install, no upload, and no dependency on the environment that just broke.
Frequently asked questions
- What does 'Unable to find a usable engine' mean in pandas?
- pandas has no Parquet reader of its own. read_parquet delegates to pyarrow or fastparquet, and this ImportError means neither could be imported in the interpreter that is running your code.
- I already ran pip install pyarrow and the error persists. Why?
- The package almost certainly landed in a different interpreter than the one running the script. Run python -m pip install pyarrow with the same python you use to execute the code, and check sys.executable inside a notebook kernel.
- Should I install pyarrow or fastparquet?
- Install pyarrow. It is the default engine in pandas 2.x, supports nested types and modern encodings, and is actively developed. Use fastparquet only when no pyarrow wheel exists for your platform.
- Can I read a Parquet file without fixing the Python environment at all?
- Yes. A browser-based viewer or a DuckDB one-liner reads the file with no pandas engine involved, which is often faster than debugging the environment when you only need to look at the data once.