{"record":{"id":"ad61452bb56bc078","repo":"pola-rs/polars","slug":"pandas-1-5-0-is-required-for-to-pandas-use-pyar","errorCode":null,"errorMessage":"pandas>=1.5.0 is required for `to_pandas(\"use_pyarrow_extension_array=True\")`, found Pandas {pd.__version__}","messagePattern":"pandas>=1\\.5\\.0 is required for `to_pandas\\(\"use_pyarrow_extension_array=True\"\\)`, found Pandas (.+?)","errorType":"exception","errorClass":"ModuleUpgradeRequiredError","httpStatus":null,"severity":"error","filePath":"py-polars/src/polars/series/series.py","lineNumber":5296,"sourceCode":"        Name: b, dtype: float64\n\n        Pass `use_pyarrow_extension_array=True` to get a pandas Series backed by a\n        PyArrow extension array. This will preserve null values.\n\n        >>> s.to_pandas(use_pyarrow_extension_array=True)\n        0       1\n        1       2\n        2    <NA>\n        Name: b, dtype: int64[pyarrow]\n        \"\"\"\n        if self.dtype == Object:\n            # Can't convert via PyArrow, so do it via NumPy\n            return pd.Series(self.to_numpy(), dtype=object, name=self.name)\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__}'\n                raise ModuleUpgradeRequiredError(msg)\n            if not _PYARROW_AVAILABLE or parse_version(pa.__version__) < (8, 0):\n                raise ModuleUpgradeRequiredError(\n                    f'pyarrow>=8.0.0 is required for `to_pandas(\"use_pyarrow_extension_array=True\")`'\n                    f\", found pyarrow {pa.__version__!r}\"\n                    if _PYARROW_AVAILABLE\n                    else \"\"\n                )\n\n        if isinstance(self.dtype, (Categorical, Enum)):\n            return (\n                self.to_frame()\n                .to_pandas(\n                    use_pyarrow_extension_array=use_pyarrow_extension_array, **kwargs\n                )\n                .iloc[:, 0]\n            )\n        else:\n            pa_arr = self.to_arrow()","sourceCodeStart":5278,"sourceCodeEnd":5314,"githubUrl":"https://github.com/pola-rs/polars/blob/fe841f959ef4d2ceefc05a310d33ed7b1ab24e5e/py-polars/src/polars/series/series.py#L5278-L5314","documentation":"to_pandas(use_pyarrow_extension_array=True) relies on pandas' ArrowDtype-backed extension arrays, introduced in pandas 1.5.0. If the installed pandas is older, polars raises ModuleUpgradeRequiredError with the detected version.","triggerScenarios":"srs.to_pandas(use_pyarrow_extension_array=True) with pandas < 1.5.0 installed (e.g. pandas 1.3/1.4 in pinned environments).","commonSituations":"Legacy environments (older conda pins, air-gapped installs) where pandas cannot be upgraded; CI images with stale pandas.","solutions":["Upgrade pandas: pip install -U 'pandas>=1.5.0'","Call to_pandas() without use_pyarrow_extension_array","Convert via numpy only: pd.Series(srs.to_numpy())"],"exampleFix":"// before\nsrs.to_pandas(use_pyarrow_extension_array=True)\n// after\n# either upgrade pandas>=1.5.0, or:\nsrs.to_pandas()","handlingStrategy":"validation","validationCode":"from polars.dependencies import pandas as pd\nfrom polars.utils.various import parse_version\nassert parse_version(pd.__version__) >= (1, 5), 'pandas>=1.5.0 required'","typeGuard":null,"tryCatchPattern":"try:\n    pdf = srs.to_pandas(use_pyarrow_extension_array=True)\nexcept pl.exceptions.ModuleUpgradeRequiredError:\n    pdf = srs.to_pandas()","preventionTips":["Pin pandas>=1.5.0 in requirements when using arrow extension arrays","Check pd.__version__ at startup in legacy environments","Use plain to_pandas() if arrow-backed dtypes are not needed"],"tags":["polars","pandas","version-requirement","dependency","pyarrow"],"backgroundTag":"missing-dependency","analyzedSha":"fe841f959ef4d2ceefc05a310d33ed7b1ab24e5e","analyzedAt":"2026-09-18T22:14:11.667Z","contentChangedAt":"2026-09-18T22:14:11.667Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}