{"record":{"id":"bc7d9a164cbfd58d","repo":"pandas-dev/pandas","slug":"pyarrow-pyarrow-min-version-is-required-for-pya-bc7d9a","errorCode":null,"errorMessage":"pyarrow>={PYARROW_MIN_VERSION} is required for PyArrow backed StringArray.","messagePattern":"pyarrow>=(.+?) is required for PyArrow backed StringArray\\.","errorType":"exception","errorClass":"ImportError","httpStatus":null,"severity":"error","filePath":"pandas/core/arrays/string_.py","lineNumber":216,"sourceCode":"        storage: str | None = None,\n        na_value: libmissing.NAType | float = libmissing.NA,\n    ) -> None:\n        # infer defaults\n        if storage is None:\n            storage = config[\"mode\"][\"string_storage\"]\n            if storage == \"auto\":\n                if HAS_PYARROW:\n                    storage = \"pyarrow\"\n                else:\n                    storage = \"python\"\n\n        # validate options\n        if storage not in {\"python\", \"pyarrow\"}:\n            raise ValueError(\n                f\"Storage must be 'python' or 'pyarrow'. Got {storage} instead.\"\n            )\n        if storage == \"pyarrow\" and not HAS_PYARROW:\n            raise ImportError(\n                f\"pyarrow>={PYARROW_MIN_VERSION} is required for PyArrow \"\n                \"backed StringArray.\"\n            )\n\n        if isinstance(na_value, float) and np.isnan(na_value):\n            # when passed a NaN value, always set to np.nan to ensure we use\n            # a consistent NaN value (and we can use `dtype.na_value is np.nan`)\n            na_value = np.nan\n        elif na_value is not libmissing.NA:\n            raise ValueError(f\"'na_value' must be np.nan or pd.NA, got {na_value}\")\n\n        self._storage = cast(\"str\", storage)\n        self._na_value = na_value\n\n    def __repr__(self) -> str:\n        storage = \"\" if self.storage == \"pyarrow\" else \"storage='python', \"\n        return f\"<StringDtype({storage}na_value={self._na_value})>\"\n","sourceCodeStart":198,"sourceCodeEnd":234,"githubUrl":"https://github.com/pandas-dev/pandas/blob/3b7651241d4da534b3559b60ef128e1c34f54116/pandas/core/arrays/string_.py#L198-L234","documentation":"Thrown by StringDtype.__init__ in pandas/core/arrays/string_.py:216 when storage='pyarrow' is requested but the optional pyarrow dependency is unavailable (or older than PYARROW_MIN_VERSION). pandas raises ImportError rather than ValueError because this is a missing-dependency condition, distinct from an invalid configuration.","triggerScenarios":"Using dtype='string[pyarrow]' or pd.StringDtype(storage='pyarrow') in an environment where pyarrow is not installed or is below the minimum supported version. Setting mode.string_storage='pyarrow' without pyarrow installed.","commonSituations":"Lightweight CI image without pyarrow. Downgrading pyarrow in a pinned environment. Fresh venv where pandas was installed without the pyarrow extra (pip install pandas without 'pyarrow' extra, then using pyarrow-backed strings).","solutions":["Install/upgrade pyarrow: pip install -U 'pyarrow>={minimum}'. Run python -c 'import pyarrow; print(pyarrow.__version__)' to confirm.","Fall back to python storage: pd.StringDtype(storage='python') or dtype='string[python]'.","If using a requirements file, add pyarrow with a lower bound matching pandas' PYARROW_MIN_VERSION."],"exampleFix":"// before\n# pyarrow not installed\npd.Series(['a'], dtype='string[pyarrow]')  # raises ImportError\n\n// after\npip install 'pyarrow>=15.0'\npd.Series(['a'], dtype='string[pyarrow]')","handlingStrategy":"fallback","validationCode":"try:\n    import pyarrow  # noqa: F401\n    HAS_PA = True\nexcept ImportError:\n    HAS_PA = False\n\nstorage = 'pyarrow' if HAS_PA else 'python'\ndtype = pd.StringDtype(storage=storage)","typeGuard":"null","tryCatchPattern":"try:\n    dtype = pd.StringDtype(storage='pyarrow')\nexcept ImportError:\n    dtype = pd.StringDtype(storage='python')","preventionTips":["Pin pyarrow in requirements with a lower bound matching pandas' minimum.","Feature-detect pyarrow in code that may run in minimal environments.","Provide a python-storage fallback in user-facing code when pyarrow is optional."],"tags":["string-dtype","pyarrow","dependency","environment"],"backgroundTag":null,"analyzedSha":"3b7651241d4da534b3559b60ef128e1c34f54116","analyzedAt":"2026-08-11T22:10:44.015Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}