code: def filter(self, items=None, like=None, regex=None, axis=None):
          
          nkw = count_not_none(items, like, regex)
          if nkw > 1:
              raise TypeError(
                  "Keyword arguments `items`, `like`, or `regex` are mutually exclusive"
              )
          if nkw == 0:
              raise TypeError("Must pass either `items`, `like`, or `regex`")
          if axis is None:
              axis = "columns"  # This is the default info axis for dataframes
  
          axis = self._get_axis_number(axis)
          labels = self.columns if axis else self.index
  
          if items is not None:
              bool_arr = labels.isin(items)
          elif like is not None:
  
              def f(x):
                  return like in to_str(x)
  
              bool_arr = labels.map(f).tolist()
          else:
  
              def f(x):
                  return matcher.search(to_str(x)) is not None
  
              matcher = re.compile(regex)
              bool_arr = labels.map(f).tolist()
          if not axis:
              return self[bool_arr]
          return self[self.columns[bool_arr]]
docs: Subset rows or columns based on their labels
  
          Args:
              items (list): list of labels to subset
              like (string): retain labels where `arg in label == True`
              regex (string): retain labels matching regex input
              axis: axis to filter on
  
          Returns:
              A new DataFrame with the filter applied.