{"record":{"id":"ea36b90da84c9746","repo":"pola-rs/polars","slug":"pyarrow-8-0-0-is-required-for-to-pandas-use-pyar","errorCode":null,"errorMessage":"pyarrow>=8.0.0 is required for `to_pandas(use_pyarrow_extension_array=True)`, found pyarrow {pa.__version__!r}.","messagePattern":"pyarrow>=8\\.0\\.0 is required for `to_pandas\\(use_pyarrow_extension_array=True\\)`, found pyarrow (.+?)\\.","errorType":"exception","errorClass":"ModuleUpgradeRequiredError","httpStatus":null,"severity":"error","filePath":"py-polars/src/polars/dataframe/frame.py","lineNumber":2620,"sourceCode":"        2  <NA>   8.0     c\n        >>> _.dtypes\n        foo           int64[pyarrow]\n        bar          double[pyarrow]\n        ham    large_string[pyarrow]\n        dtype: object\n        \"\"\"\n        if self.width == 0:\n            return pd.DataFrame(index=range(self.height))\n\n        if use_pyarrow_extension_array:\n            if parse_version(pd.__version__) < (1, 5):\n                msg = f'pandas>=1.5.0 is required for `to_pandas(\"use_pyarrow_extension_array=True\")`, found Pandas {pd.__version__!r}'\n                raise ModuleUpgradeRequiredError(msg)\n            if not _PYARROW_AVAILABLE or parse_version(pa.__version__) < (8, 0):\n                msg = \"pyarrow>=8.0.0 is required for `to_pandas(use_pyarrow_extension_array=True)`\"\n                if _PYARROW_AVAILABLE:\n                    msg += f\", found pyarrow {pa.__version__!r}.\"\n                    raise ModuleUpgradeRequiredError(msg)\n                else:\n                    raise ModuleNotFoundError(msg)\n\n        # handle Object columns separately (Arrow does not convert them correctly)\n        if Object in self.dtypes:\n            return self._to_pandas_with_object_columns(\n                use_pyarrow_extension_array=use_pyarrow_extension_array, **kwargs\n            )\n\n        return self._to_pandas_without_object_columns(\n            self, use_pyarrow_extension_array=use_pyarrow_extension_array, **kwargs\n        )\n\n    def _to_pandas_with_object_columns(\n        self,\n        *,\n        use_pyarrow_extension_array: bool,\n        **kwargs: Any,","sourceCodeStart":2602,"sourceCodeEnd":2638,"githubUrl":"https://github.com/pola-rs/polars/blob/df599052daf96e7a9cc30a3b0c6bd25d6947e3c0/py-polars/src/polars/dataframe/frame.py#L2602-L2638","documentation":"Raised as ModuleUpgradeRequiredError by DataFrame.to_pandas(use_pyarrow_extension_array=True) when pyarrow IS installed but its version is below 8.0.0. The pandas ArrowDtype/extension-array path relies on pyarrow features stabilized by 8.0, so polars checks `parse_version(pa.__version__) < (8, 0)` and appends the found version to the message. Distinct from the ModuleNotFoundError variant: here pyarrow exists, it is just too old.","triggerScenarios":"`df.to_pandas(use_pyarrow_extension_array=True)` with pyarrow 7.x or older installed — common when another package (older pandas, ray, older duckdb) pinned a legacy pyarrow.","commonSituations":"Dependency resolver picking an old pyarrow to satisfy another package's upper bound; long-lived conda environments; air-gapped installs from stale wheels; mismatch between a freshly upgraded pandas and an old pyarrow.","solutions":["Upgrade pyarrow: `pip install -U 'pyarrow>=8'`","If another package caps pyarrow below 8, upgrade that package or drop the extension-array flag (`df.to_pandas()`)","Verify with `python -c \"import pyarrow; print(pyarrow.__version__)\"` after upgrading"],"exampleFix":"# before (pyarrow 7)\npdf = df.to_pandas(use_pyarrow_extension_array=True)  # ModuleUpgradeRequiredError\n\n# after\n# pip install -U 'pyarrow>=8'\npdf = df.to_pandas(use_pyarrow_extension_array=True)","handlingStrategy":"validation","validationCode":"try:\n    import pyarrow as pa\n    pa_ok = parse_version(pa.__version__) >= (8, 0)\nexcept ImportError:\n    pa_ok = False\n\npdf = df.to_pandas(use_pyarrow_extension_array=True) if pa_ok else df.to_pandas()","typeGuard":null,"tryCatchPattern":"try:\n    pdf = df.to_pandas(use_pyarrow_extension_array=True)\nexcept ModuleUpgradeRequiredError as e:\n    if 'pyarrow>=8.0.0' in str(e) and 'found pyarrow' in str(e):\n        pdf = df.to_pandas()\n    else:\n        raise","preventionTips":["Pin 'pyarrow>=8' alongside the extension-array flag","Detect dependency caps from other packages that hold pyarrow below 8","Verify versions after environment changes with a startup self-check"],"tags":["pyarrow","version-mismatch","dependency","pandas"],"backgroundTag":null,"analyzedSha":"df599052daf96e7a9cc30a3b0c6bd25d6947e3c0","analyzedAt":"2026-08-16T12:10:03.978Z","schemaVersion":2},"datasetVersion":"2026-08-16T13:17:31.715Z"}