code: def winsorise_uint32(df, invalid_data_behavior, column, *columns):
      
      columns = list((column,) + columns)
      mask = df[columns] > UINT32_MAX
  
      if invalid_data_behavior != 'ignore':
          mask |= df[columns].isnull()
      else:
          # we are not going to generate a warning or error for this so just use
          # nan_to_num
          df[columns] = np.nan_to_num(df[columns])
  
      mv = mask.values
      if mv.any():
          if invalid_data_behavior == 'raise':
              raise ValueError(
                  '%d values out of bounds for uint32: %r' % (
                      mv.sum(), df[mask.any(axis=1)],
                  ),
              )
          if invalid_data_behavior == 'warn':
              warnings.warn(
                  'Ignoring %d values because they are out of bounds for'
                  ' uint32: %r' % (
                      mv.sum(), df[mask.any(axis=1)],
                  ),
                  stacklevel=3,  # one extra frame for `expect_element`
              )
  
      df[mask] = 0
      return df
docs: Drops any record where a value would not fit into a uint32.
  
      Parameters
      ----------
      df : pd.DataFrame
          The dataframe to winsorise.
      invalid_data_behavior : {'warn', 'raise', 'ignore'}
          What to do when data is outside the bounds of a uint32.
      *columns : iterable[str]
          The names of the columns to check.
  
      Returns
      -------
      truncated : pd.DataFrame
          ``df`` with values that do not fit into a uint32 zeroed out.