from pandas import ( Categorical, Index, Series, ) from pandas.core.arrays import BaseMaskedArray def get_array(obj, col=None): """ Helper method to get array for a DataFrame column or a Series. Equivalent of df[col].values, but without going through normal getitem, which triggers tracking references / CoW (and we might be testing that this is done by some other operation). """ if isinstance(obj, Index): arr = obj._values elif isinstance(obj, Series) and (col is None or obj.name == col): arr = obj._values else: assert col is not None icol = obj.columns.get_loc(col) assert isinstance(icol, int) arr = obj._get_column_array(icol) if isinstance(arr, BaseMaskedArray): return arr._data elif isinstance(arr, Categorical): return arr return getattr(arr, "_ndarray", arr)