{"record":{"id":"be126181ac474fa5","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__!r}","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/dataframe/frame.py","lineNumber":2615,"sourceCode":"\n        >>> df.to_pandas(use_pyarrow_extension_array=True)\n            foo   bar   ham\n        0     1   6.0  <NA>\n        1     2  <NA>     b\n        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","sourceCodeStart":2597,"sourceCodeEnd":2633,"githubUrl":"https://github.com/pola-rs/polars/blob/df599052daf96e7a9cc30a3b0c6bd25d6947e3c0/py-polars/src/polars/dataframe/frame.py#L2597-L2633","documentation":"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.","triggerScenarios":"`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)`.","commonSituations":"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.","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"],"exampleFix":"# before (pandas 1.4)\npdf = df.to_pandas(use_pyarrow_extension_array=True)  # ModuleUpgradeRequiredError\n\n# after\n# pip install -U 'pandas>=1.5'\npdf = df.to_pandas(use_pyarrow_extension_array=True)","handlingStrategy":"validation","validationCode":"import pandas as pd\nfrom polars._utils.version import parse_version\n\nif parse_version(pd.__version__) < (1, 5):\n    pdf = df.to_pandas()  # fallback: no extension arrays\nelse:\n    pdf = df.to_pandas(use_pyarrow_extension_array=True)","typeGuard":null,"tryCatchPattern":"try:\n    pdf = df.to_pandas(use_pyarrow_extension_array=True)\nexcept ModuleUpgradeRequiredError as e:\n    if 'pandas>=1.5.0' in str(e):\n        pdf = df.to_pandas()  # or abort and demand the upgrade\n    else:\n        raise","preventionTips":["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"],"tags":["pandas","version-mismatch","dependency","pyarrow"],"backgroundTag":null,"analyzedSha":"df599052daf96e7a9cc30a3b0c6bd25d6947e3c0","analyzedAt":"2026-08-16T12:10:03.978Z","schemaVersion":2},"datasetVersion":"2026-08-16T13:17:31.715Z"}