{"record":{"id":"46e474fb6e6925ac","repo":"pandas-dev/pandas","slug":"pyarrow-pyarrow-min-version-is-required-for-pya","errorCode":null,"errorMessage":"pyarrow>={PYARROW_MIN_VERSION} is required for PyArrow backed ArrowExtensionArray.","messagePattern":"pyarrow>=(.+?) is required for PyArrow backed ArrowExtensionArray\\.","errorType":"exception","errorClass":"ImportError","httpStatus":null,"severity":"error","filePath":"pandas/core/arrays/arrow/array.py","lineNumber":405,"sourceCode":"\n    >>> pd.array([1, 1, None], dtype=\"int64[pyarrow]\")\n    <ArrowExtensionArray>\n    [1, 1, <NA>]\n    Length: 3, dtype: int64[pyarrow]\n    \"\"\"  # noqa: E501 (http link too long)\n\n    _pa_array: pa.ChunkedArray\n    _dtype: ArrowDtype\n    # results from calls to methods decorated with cache_readonly get added here\n    _cache: dict[str, pa.ChunkedArray]\n\n    def __init__(self, values: pa.Array | pa.ChunkedArray) -> None:\n        if not HAS_PYARROW:\n            msg = (\n                f\"pyarrow>={PYARROW_MIN_VERSION} is required for PyArrow \"\n                \"backed ArrowExtensionArray.\"\n            )\n            raise ImportError(msg)\n        if isinstance(values, pa.Array):\n            self._pa_array = pa.chunked_array([values])\n        elif isinstance(values, pa.ChunkedArray):\n            self._pa_array = values\n        else:\n            raise ValueError(\n                f\"Unsupported type '{type(values)}' for ArrowExtensionArray\"\n            )\n        self._dtype = ArrowDtype(self._pa_array.type)\n        self._cache = {}\n\n    @classmethod\n    def _from_sequence(\n        cls, scalars, *, dtype: Dtype | None = None, copy: bool = False\n    ) -> Self:\n        \"\"\"\n        Construct a new ExtensionArray from a sequence of scalars.\n        \"\"\"","sourceCodeStart":387,"sourceCodeEnd":423,"githubUrl":"https://github.com/pandas-dev/pandas/blob/3b7651241d4da534b3559b60ef128e1c34f54116/pandas/core/arrays/arrow/array.py#L387-L423","documentation":"`ImportError` from `ArrowExtensionArray.__init__` when pyarrow is not installed (or is older than `PYARROW_MIN_VERSION`, currently '13.0.0'). The `HAS_PYARROW` flag from `pandas.compat` is False, so constructing an `ArrowExtensionArray` directly — or any operation that needs to materialize one (e.g. `dtype=pd.ArrowDtype(...)`, `convert_dtypes(dtype_backend='pyarrow')`, reading parquet) — refuses to proceed rather than failing later inside pyarrow.","triggerScenarios":"`pd.array(data, dtype=pd.ArrowDtype(pa.int64()))` with pyarrow missing; `df.convert_dtypes(dtype_backend='pyarrow')` without pyarrow; `pd.read_parquet(...)` paths that build an ArrowExtensionArray; explicitly `ArrowExtensionArray(pa.array(...))`.","commonSituations":"Deploying to a slimmed-down environment that installed pandas without the `pyarrow` extra; CI matrix that omits pyarrow; version drift where the installed pyarrow is below pandas' minimum.","solutions":["Install pyarrow at or above the minimum: `pip install 'pyarrow>=13.0.0'` (or `pip install pandas[pyarrow]`).","Pin pyarrow in your requirements to a version pandas supports.","If you cannot install pyarrow, avoid Arrow-backed dtypes: use numpy/object/string backends and drop `dtype_backend='pyarrow'` / `pd.ArrowDtype(...)`."],"exampleFix":"// before\n$ pip install pandas\n>>> df.convert_dtypes(dtype_backend='pyarrow')   # ImportError\n\n// after\n$ pip install 'pyarrow>=13.0.0'\n>>> df.convert_dtypes(dtype_backend='pyarrow')","handlingStrategy":"validation","validationCode":"from pandas.compat import HAS_PYARROW\nif not HAS_PYARROW:\n    raise ImportError(\"Install pyarrow>=13.0.0: pip install 'pyarrow>=13.0.0'\")\nArrowExtensionArray(pa.array(data))","typeGuard":"def pyarrow_available() -> bool:\n    from pandas.compat import HAS_PYARROW\n    return HAS_PYARROW","tryCatchPattern":"try:\n    arr = ArrowExtensionArray(pa.array(data))\nexcept ImportError as e:\n    if 'pyarrow' in str(e):\n        raise SystemExit('This feature needs pyarrow. pip install pandas[pyarrow]') from e\n    raise","preventionTips":["Declare pandas[pyarrow] in requirements","Gate Arrow-backed code behind HAS_PYARROW","Verify pyarrow version in CI: pyarrow.__version__ >= pandas' minimum"],"tags":["pyarrow","import","environment","dependency","version"],"backgroundTag":null,"analyzedSha":"3b7651241d4da534b3559b60ef128e1c34f54116","analyzedAt":"2026-08-11T22:10:44.015Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}