{"record":{"id":"36496672df97abe4","repo":"pandas-dev/pandas","slug":"type-self-name-with-dtype-self-dtype-do-364966","errorCode":null,"errorMessage":"'{type(self).__name__}' with dtype {self.dtype} does not support operation '{name}' with pyarrow version {pa.__version__}. '{name}' may be supported by upgrading pyarrow.","messagePattern":"'(.+?)' with dtype (.+?) does not support operation '(.+?)' with pyarrow version (.+?)\\. '(.+?)' may be supported by upgrading pyarrow\\.","errorType":"exception","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"pandas/core/arrays/arrow/array.py","lineNumber":2625,"sourceCode":"        elif name == \"median\":\n            # GH 52679: Use quantile instead of approximate_median\n            kwargs[\"q\"] = 0.5\n        elif name in [\"std\", \"var\", \"sem\"] and \"ddof\" not in kwargs:\n            # pyarrow defaults to ddof=0, pandas behavior is ddof=1\n            kwargs[\"ddof\"] = 1\n        elif name in [\"skew\", \"kurt\"] and \"biased\" not in kwargs:\n            kwargs[\"biased\"] = False\n\n        try:\n            result = pyarrow_meth(data_to_reduce, skip_nulls=skipna, **kwargs)\n        except (AttributeError, NotImplementedError, TypeError) as err:\n            msg = (\n                f\"'{type(self).__name__}' with dtype {self.dtype} \"\n                f\"does not support operation '{name}' with pyarrow \"\n                f\"version {pa.__version__}. '{name}' may be supported by \"\n                f\"upgrading pyarrow.\"\n            )\n            raise TypeError(msg) from err\n        if name == \"median\":\n            # GH 52679: Use quantile instead of approximate_median; returns array\n            result = result[0]\n\n        if name in [\"min\", \"max\", \"sum\"] and pa.types.is_duration(pa_type):\n            result = result.cast(pa_type)\n        if name in [\"median\", \"mean\"] and pa.types.is_temporal(pa_type):\n            nbits = pa_type.bit_width\n            if nbits == 32:\n                result = result.cast(pa.int32(), safe=False)\n            else:\n                result = result.cast(pa.int64(), safe=False)\n            result = result.cast(pa_type)\n        if name in [\"std\", \"sem\"] and pa.types.is_temporal(pa_type):\n            result = result.cast(pa.int64(), safe=False)\n            if pa.types.is_duration(pa_type):\n                result = result.cast(pa_type)\n            elif pa.types.is_time(pa_type):","sourceCodeStart":2607,"sourceCodeEnd":2643,"githubUrl":"https://github.com/pandas-dev/pandas/blob/3b7651241d4da534b3559b60ef128e1c34f54116/pandas/core/arrays/arrow/array.py#L2607-L2643","documentation":"The companion guard to 146: when pyarrow.compute has the named function but invoking it raises AttributeError, NotImplementedError, or TypeError (typically because the installed pyarrow lacks a kernel for this dtype), pandas reports that the operation may be supported by upgrading pyarrow. The current and operation names are included to guide the upgrade.","triggerScenarios":"Calling a reduction (e.g. .skew(), .kurt(), .sem(), .median()) whose pyarrow.compute kernel exists but fails for the array's pyarrow type, on an older pyarrow install.","commonSituations":"CI or production environments pinning an older pyarrow; user upgrades pandas without upgrading pyarrow; new reduction added to pandas not yet available in the user's pyarrow.","solutions":["Upgrade pyarrow to the latest version (pip install -U pyarrow).","Cast to numpy dtype and compute the statistic with scipy/numpy instead.","Pin pandas and pyarrow to compatible versions per pandas release notes."],"exampleFix":"// before\n# pyarrow too old\ns = pd.Series([1., 2., 3.], dtype=\"double[pyarrow]\")\ns.kurt()\n// after\npip install -U pyarrow\ns = pd.Series([1., 2., 3.], dtype=\"double[pyarrow]\")\ns.kurt()","handlingStrategy":"retry","validationCode":"import pyarrow as pa\n\ndef pyarrow_supports(name, min_version=\"10.0.0\") -> bool:\n    from packaging.version import Version\n    return Version(pa.__version__) >= Version(min_version)","typeGuard":"import pyarrow as pa\n\ndef pyarrow_recent_enough(min_version=\"12.0.0\") -> bool:\n    from packaging.version import Version\n    return Version(pa.__version__) >= Version(min_version)","tryCatchPattern":"try:\n    s.kurt()\nexcept TypeError as e:\n    if \"upgrading pyarrow\" in str(e):\n        s.astype(\"float64\").kurt()  # fallback before upgrade\n    else:\n        raise","preventionTips":["Pin pandas and pyarrow to versions released together.","Upgrade pyarrow alongside pandas in CI.","Provide a numpy/scipy fallback for advanced statistics."],"tags":["pyarrow","reduce","version","upgrade"],"backgroundTag":null,"analyzedSha":"3b7651241d4da534b3559b60ef128e1c34f54116","analyzedAt":"2026-08-11T22:10:44.015Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}