code: def _process_numpy_column(
      X_col, categories, feature_type, min_unique_continuous
  ):
      nonmissings = None
  
      if isinstance(X_col, ma.masked_array):
          mask = X_col.mask
          if mask is ma.nomask:
              X_col = X_col.data
          else:
              X_col = X_col.compressed()
              # it's legal for a mask to exist and yet have all valid entries in the mask, so check for this
              if len(X_col) != len(mask):
                  nonmissings = ~mask
  
      if X_col.dtype.type is np.object_:
          if _pandas_installed:
              # pandas also has the pd.NA value that indicates missing.  If Pandas is available though
              # we can use it's function that checks for pd.NA, np.nan, and None
              nonmissings2 = pd.notna(X_col)
          else:
              # X_col == X_col is a check for nan that works even with mixed types, since nan != nan
              nonmissings2 = np.logical_and(
                  X_col != _none_ndarray, X_col == X_col
              )
          if not nonmissings2.all():
              X_col = X_col[nonmissings2]
              if nonmissings is None:
                  nonmissings = nonmissings2
              else:
                  # it's a little weird and possibly dangerous to place inside the array being read,
                  # but algorithmically this is the fastest thing to do, and it seems to work..
                  np.place(nonmissings, nonmissings, nonmissings2)
  
      return _process_ndarray(
          X_col,
          nonmissings,
          categories,
          feature_type,
          min_unique_continuous,
      )
  
imports: from collections import Counter
  from itertools import count
  import numpy
  import numpy.ma
  import logging
label_desc: Use image node_id 9 for calling a global function with example usage: _process_numpy_column(X_col, categories, feature_type, min_unique_continuous) and returns: _process_ndarray