pola-rs/polars · error · ModuleUpgradeRequiredError
pandas>=1.5.0 is required for `to_pandas("use_pyarrow_extens
Error message
pandas>=1.5.0 is required for `to_pandas("use_pyarrow_extension_array=True")`, found Pandas {pd.__version__!r} What it means
Raised as ModuleUpgradeRequiredError by DataFrame.to_pandas(use_pyarrow_extension_array=True) when the installed pandas is older than 1.5.0. Arrow-backed extension dtypes in pandas (int64[pyarrow], large_string[pyarrow], ...) were only made usable at scale in the 1.5 series, so polars gates the option on that version and reports the found version in the message. It fires before any conversion work starts.
Source
Thrown at py-polars/src/polars/dataframe/frame.py:2615
>>> df.to_pandas(use_pyarrow_extension_array=True)
foo bar ham
0 1 6.0 <NA>
1 2 <NA> b
2 <NA> 8.0 c
>>> _.dtypes
foo int64[pyarrow]
bar double[pyarrow]
ham large_string[pyarrow]
dtype: object
"""
if self.width == 0:
return pd.DataFrame(index=range(self.height))
if use_pyarrow_extension_array:
if parse_version(pd.__version__) < (1, 5):
msg = f'pandas>=1.5.0 is required for `to_pandas("use_pyarrow_extension_array=True")`, found Pandas {pd.__version__!r}'
raise ModuleUpgradeRequiredError(msg)
if not _PYARROW_AVAILABLE or parse_version(pa.__version__) < (8, 0):
msg = "pyarrow>=8.0.0 is required for `to_pandas(use_pyarrow_extension_array=True)`"
if _PYARROW_AVAILABLE:
msg += f", found pyarrow {pa.__version__!r}."
raise ModuleUpgradeRequiredError(msg)
else:
raise ModuleNotFoundError(msg)
# handle Object columns separately (Arrow does not convert them correctly)
if Object in self.dtypes:
return self._to_pandas_with_object_columns(
use_pyarrow_extension_array=use_pyarrow_extension_array, **kwargs
)
return self._to_pandas_without_object_columns(
self, use_pyarrow_extension_array=use_pyarrow_extension_array, **kwargs
)
View on GitHub (pinned to df599052da)
Solutions
- Upgrade pandas: `pip install -U 'pandas>=1.5'` (or `conda install 'pandas>=1.5'`)
- If you cannot upgrade, drop the flag: `df.to_pandas()` (object/numpy dtypes, still copies)
- Pin `pandas>=1.5` in your project requirements so environments can't regress
Example fix
# before (pandas 1.4) pdf = df.to_pandas(use_pyarrow_extension_array=True) # ModuleUpgradeRequiredError # after # pip install -U 'pandas>=1.5' pdf = df.to_pandas(use_pyarrow_extension_array=True)
Defensive patterns
Strategy: validation
Validate before calling
import pandas as pd
from polars._utils.version import parse_version
if parse_version(pd.__version__) < (1, 5):
pdf = df.to_pandas() # fallback: no extension arrays
else:
pdf = df.to_pandas(use_pyarrow_extension_array=True) Try / catch
try:
pdf = df.to_pandas(use_pyarrow_extension_array=True)
except ModuleUpgradeRequiredError as e:
if 'pandas>=1.5.0' in str(e):
pdf = df.to_pandas() # or abort and demand the upgrade
else:
raise Prevention
- Pin 'pandas>=1.5' in requirements when using extension-array output
- Check pandas/pyarrow versions at app startup, not mid-export
- Keep a tested fallback path (plain to_pandas) for constrained environments
When it happens
Trigger: `df.to_pandas(use_pyarrow_extension_array=True)` in an environment with pandas < 1.5.0 — e.g. pinned legacy environments, base conda envs, or old distro python. The check is `parse_version(pd.__version__) < (1, 5)`.
Common situations: Corporate environments with pinned old pandas; freshly created venvs where pandas was installed as an old transitive dependency; CI images built years ago; mixing polars (modern) with pandas (legacy) for interop.
Related errors
- pyarrow>=8.0.0 is required for `to_pandas(use_pyarrow_extens
- pyarrow is required for converting a pandas series to Polars
- pyarrow>=8.0.0 is required for `to_pandas(use_pyarrow_extens
- `autofit=True` requires xlsxwriter 3.0.8 or higher, found {x
- pyarrow is required for adbc-driver-manager < {adbc_version_
AI-assisted analysis of pola-rs/polars@df599052da (2026-08-16).
Data as JSON: /api/errors/be126181ac474fa5.
Report an issue: GitHub.