code: def remove_missing(df, na_rm=False, vars=None, name='', finite=False):
      
      n = len(df)
  
      if vars is None:
          vars = df.columns
      else:
          vars = df.columns.intersection(vars)
  
      if finite:
          lst = [np.inf, -np.inf]
          to_replace = {v: lst for v in vars}
          df.replace(to_replace, np.nan, inplace=True)
          txt = 'non-finite'
      else:
          txt = 'missing'
  
      df = df.dropna(subset=vars)
      df.reset_index(drop=True, inplace=True)
      if len(df) < n and not na_rm:
          msg = '{} : Removed {} rows containing {} values.'
          warn(msg.format(name, n-len(df), txt), PlotnineWarning, stacklevel=3)
      return df
docs: Convenience function to remove missing values from a dataframe
  
      Parameters
      ----------
      df : dataframe
      na_rm : bool
          If False remove all non-complete rows with and show warning.
      vars : list-like
          columns to act on
      name : str
          Name of calling method for a more informative message
      finite : bool
          If True replace the infinite values in addition to the NaNs