[docs]@pd.api.extensions.register_series_accessor("ak")@pd.api.extensions.register_dataframe_accessor("ak")classPandasAwkwardAccessor(EagerAccessor):"""Perform awkward operations on pandas data Nested structures are handled using arrow as the storage backend. If you use pandas object columns (python lists, dicts, strings), they will be converted on any access to a ``.ak`` method. """series_type=pd.Seriesdataframe_type=pd.DataFrame@classmethoddefto_arrow(cls,data):ifisinstance(data,ak.Array):returnak.to_arrow(data)ifisinstance(data,ak.Record):returnak.to_arrow_table(data)ifisinstance(data,(pyarrow.Array,pyarrow.Table)):returndataifisinstance(data,cls.series_type):ifgetattr(data.dtype,"storage","")=="pyarrow":returndata.array.__arrow_array__()returnpa.array(data)returnpa.table(data)defto_output(self,data=None):# override to apply indexdata:ak.Array=dataifdataisnotNoneelseself.arrayifnotisinstance(data,Iterable):returndataarr=pd.arrays.ArrowExtensionArray(ak.to_arrow(data,extensionarray=False))ifself._objisnotNoneandlen(arr)==len(self._obj.index):returnpd.Series(arr,index=self._obj.index)else:returnpd.Series(arr)@staticmethoddef_validate(_):# required by pandasreturnTrue