def array_to_series(array): if isinstance(array, pa.ChunkedArray): return Series._concat( [array_to_series(chunk) for chunk in array.chunks] ) if isinstance(array, pa.Column): return Series._concat( [array_to_series(chunk) for chunk in array.data.chunks] ) array_len = len(array) null_count = array.null_count buffers = make_device_arrays(array) mask, data = buffers[0], buffers[1] dtype = arrow_to_pandas_dtype(array.type) if pa.types.is_dictionary(array.type): from cudf.dataframe import CategoricalColumn codes = array_to_series(array.indices) categories = array_to_series(array.dictionary) data = CategoricalColumn( data=codes.data, mask=mask, null_count=null_count, categories=categories, ordered=array.type.ordered, ) elif pa.types.is_string(array.type): import nvstrings offs, data = buffers[1], buffers[2] offs = offs[array.offset : array.offset + array_len + 1] data = None if data is None else data.device_ctypes_pointer.value mask = None if mask is None else mask.device_ctypes_pointer.value data = nvstrings.from_offsets( data, offs.device_ctypes_pointer.value, array_len, mask, null_count, True, ) elif data is not None: data = data[array.offset : array.offset + len(array)] series = Series(data, dtype=dtype) if null_count > 0 and mask is not None and not series.has_null_mask: return series.set_mask(mask, null_count) return series
def make_series(self): """Make a Series object out of this node """ if self.is_dictionary: sr = self._make_dictionary_series() else: sr = Series(self.data) # set nullmask if self.null_count: sr = sr.set_mask(self.null, null_count=self.null_count) return sr