{"record":{"id":"eff81327dbd244db","repo":"pandas-dev/pandas","slug":"not-supported-to-convert-periodarray-to-type-t","errorCode":null,"errorMessage":"Not supported to convert PeriodArray to '{type}' type","messagePattern":"Not supported to convert PeriodArray to '(.+?)' type","errorType":"exception","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"pandas/core/arrays/period.py","lineNumber":481,"sourceCode":"        \"\"\"\n        Convert myself into a pyarrow Array.\n        \"\"\"\n        import pyarrow\n\n        from pandas.core.arrays.arrow.extension_types import ArrowPeriodType\n\n        if type is not None:\n            if pyarrow.types.is_integer(type):\n                return pyarrow.array(self._ndarray, mask=self.isna(), type=type)\n            elif isinstance(type, ArrowPeriodType):\n                # ensure we have the same freq\n                if self.freqstr != type.freq:\n                    raise TypeError(\n                        \"Not supported to convert PeriodArray to array with different \"\n                        f\"'freq' ({self.freqstr} vs {type.freq})\"\n                    )\n            else:\n                raise TypeError(\n                    f\"Not supported to convert PeriodArray to '{type}' type\"\n                )\n\n        period_type = ArrowPeriodType(self.freqstr)\n        storage_array = pyarrow.array(self._ndarray, mask=self.isna(), type=\"int64\")\n        return pyarrow.ExtensionArray.from_storage(period_type, storage_array)\n\n    # --------------------------------------------------------------------\n    # Vectorized analogues of Period properties\n\n    year = _field_accessor(\n        \"year\",\n        \"\"\"\n        The year of the period.\n\n        Returns the year component for each period in the index.\n\n        See Also","sourceCodeStart":463,"sourceCodeEnd":499,"githubUrl":"https://github.com/pandas-dev/pandas/blob/71959b8cb9b2459c16e14b34f28b178ccfe14735/pandas/core/arrays/period.py#L463-L499","documentation":"Raised by PeriodArray.__arrow_array__ when the target pyarrow type is neither an integer type nor an ArrowPeriodType. PeriodArray can only export losslessly to pyarrow int64 (raw ordinals + mask) or to a matching ArrowPeriodType; any other pyarrow type (string, timestamp, float) is unsupported via this path.","triggerScenarios":"pa.__arrow_array__(type=pyarrow.string()), pa.__arrow_array__(type=pyarrow.timestamp('ns')), or pyarrow.array(pa, type=some_unsupported_type).","commonSituations":"Hardcoded Arrow schemas that assume period maps to timestamp or string. Migrating legacy parquet schemas. Generic to_arrow helpers that pass through whatever type the user specified.","solutions":["Omit the explicit type: pa.__arrow_array__() returns a pyarrow.ExtensionArray of ArrowPeriodType.","For timestamps, convert first: pa.to_timestamp().__arrow_array__(type=pyarrow.timestamp('us')).","For raw ordinals, target pyarrow.int64()."],"exampleFix":"# before\nimport pyarrow as pa\narr = pd.period_array(['2020-01-01'], dtype=pd.PeriodDtype('D')).__arrow_array__(type=pa.string())\n# after\narr = pd.period_array(['2020-01-01'], dtype=pd.PeriodDtype('D')).__arrow_array__()  # ArrowPeriodType\n# or convert to timestamp first\nts = pd.period_array(['2020-01-01'], dtype=pd.PeriodDtype('D')).to_timestamp()\narr = ts.__arrow_array__(type=pa.timestamp('us'))","handlingStrategy":"validation","validationCode":"import pyarrow as pa\nfrom pandas.core.arrays.arrow.extension_types import ArrowPeriodType\n\ndef supported_arrow_type(t):\n    if t is None or pa.types.is_integer(t) or isinstance(t, ArrowPeriodType):\n        return True\n    return False","typeGuard":"import pyarrow as pa\nfrom pandas.core.arrays.arrow.extension_types import ArrowPeriodType\n\ndef arrow_type_supports_period(t) -> bool:\n    return t is None or pa.types.is_integer(t) or isinstance(t, ArrowPeriodType)","tryCatchPattern":"try:\n    out = period_array.__arrow_array__(type=target)\nexcept TypeError:\n    out = period_array.__arrow_array__()","preventionTips":["Do not force non-period Arrow types on period columns.","Convert to timestamp/string in pandas before the Arrow boundary.","Let __arrow_array__ infer the type when in doubt."],"tags":["period","arrow","conversion","pandas-arrays"],"analyzedSha":"71959b8cb9b2459c16e14b34f28b178ccfe14735","analyzedAt":"2026-08-07T01:30:20.476Z","schemaVersion":2},"datasetVersion":"2026-08-07T03:17:09.362Z"}