diff --git a/python/cudf/dataframe/column.py b/python/cudf/dataframe/column.py index df6ac93d9645..3953514a0ef9 100644 --- a/python/cudf/dataframe/column.py +++ b/python/cudf/dataframe/column.py @@ -106,15 +106,10 @@ def __init__(self, data, mask=None, null_count=None): nnz = _gdf.count_nonzero_mask(self._mask.mem, size=len(self)) null_count = len(self) - nnz - if null_count == 0: - self._mask = None else: null_count = 0 assert 0 <= null_count <= len(self) - if null_count == 0: - # Remove mask if null_count is zero - self._mask = None self._null_count = null_count diff --git a/python/cudf/groupby/groupby.py b/python/cudf/groupby/groupby.py index 251e47ee3e1e..06ba4aa710c1 100644 --- a/python/cudf/groupby/groupby.py +++ b/python/cudf/groupby/groupby.py @@ -14,6 +14,8 @@ from libgdf_cffi import ffi, libgdf from librmm_cffi import librmm as rmm +from .utils import make_mask + class Groupby(object): """Groupby object returned by cudf.DataFrame.groupby(). @@ -109,11 +111,18 @@ def _apply_agg(self, agg_type, result, add_col_values, out_col_values = ffi.NULL if agg_type == "count": - out_col_agg_series = Series( - Buffer(rmm.device_array(col_agg.size, dtype=np.int64))) + out_col_agg_series = Series.from_masked_array( + data=rmm.device_array(col_agg.size, dtype=np.int64), + mask=make_mask(col_agg.size) + ) else: - out_col_agg_series = Series(Buffer(rmm.device_array( - col_agg.size, dtype=self._df[val_col]._column.data.dtype))) + out_col_agg_series = Series.from_masked_array( + data=rmm.device_array( + col_agg.size, + dtype=self._df[val_col]._column.data.dtype + ), + mask=make_mask(col_agg.size) + ) out_col_agg = out_col_agg_series._column.cffi_view diff --git a/python/cudf/utils/cudautils.py b/python/cudf/utils/cudautils.py index af1092986317..db82b5ba92b0 100755 --- a/python/cudf/utils/cudautils.py +++ b/python/cudf/utils/cudautils.py @@ -181,7 +181,8 @@ def gpu_fill_value(data, value): def fill_value(arr, value): """Fill *arr* with value """ - gpu_fill_value.forall(arr.size)(arr, value) + if arr.size > 0: + gpu_fill_value.forall(arr.size)(arr, value) @cuda.jit @@ -373,9 +374,10 @@ def gpu_fill_masked(value, validity, out): def fillna(data, mask, value): out = rmm.device_array_like(data) - out.copy_to_device(data) - configured = gpu_fill_masked.forall(data.size) - configured(value, mask, out) + if out.size > 0: + out.copy_to_device(data) + configured = gpu_fill_masked.forall(data.size) + configured(value, mask, out) return out