Example #1
0
    def fillna(self, fill_value, inplace=False):
        if is_single_value(fill_value):
            fill_value = np.datetime64(fill_value, 'ms')
        else:
            fill_value = columnops.as_column(fill_value, nan_as_null=False)

        result = cpp_replace.apply_replace_nulls(self, fill_value)

        result = result.replace(mask=None)
        return self._mimic_inplace(result, inplace)
Example #2
0
    def fillna(self, fill_value, inplace=False):
        """
        Fill null values with *fill_value*
        """
        if not self.has_null_mask:
            return self

        fill_is_scalar = np.isscalar(fill_value)

        if fill_is_scalar:
            if fill_value == self.default_na_value():
                fill_value = self.data.dtype.type(fill_value)
            else:
                try:
                    fill_value = self._encode(
                        pd.Categorical(fill_value,
                                       categories=self.cat().categories))
                    fill_value = self.data.dtype.type(fill_value)
                except (ValueError) as err:
                    err_msg = "fill value must be in categories"
                    raise ValueError(err_msg) from err
        else:
            fill_value = columnops.as_column(fill_value, nan_as_null=False)
            # TODO: only required if fill_value has a subset of the categories:
            fill_value = fill_value.cat()._set_categories(
                self.cat().categories)
            fill_value = columnops.as_column(fill_value.data).astype(
                self.data.dtype)

        result = cpp_replace.apply_replace_nulls(self, fill_value)

        result = columnops.build_column(
            result.data,
            "category",
            result.mask,
            categories=self.cat().categories,
        )

        return self._mimic_inplace(result.replace(mask=None), inplace)
Example #3
0
 def fillna(self, fill_value, inplace=False):
     """
     Fill null values with *fill_value*
     """
     if np.isscalar(fill_value):
         # castsafely to the same dtype as self
         fill_value_casted = self.dtype.type(fill_value)
         if not np.isnan(fill_value) and (fill_value_casted != fill_value):
             raise TypeError(
                 "Cannot safely cast non-equivalent {} to {}".format(
                     type(fill_value).__name__, self.dtype.name
                 )
             )
         fill_value = fill_value_casted
     else:
         fill_value = columnops.as_column(fill_value, nan_as_null=False)
         # cast safely to the same dtype as self
         if is_integer_dtype(self.dtype):
             fill_value = safe_cast_to_int(fill_value, self.dtype)
         else:
             fill_value = fill_value.astype(self.dtype)
     result = cpp_replace.apply_replace_nulls(self, fill_value)
     return self._mimic_inplace(result, inplace)