code: def drop_duplicates(  # noqa: C901
      self,
      axis: str = "rows",
      subset: Optional[Iterable[str]] = None,
      ignore_empty: bool = True,
  ):
      if axis not in ["rows", "cols"]:
          raise ValueError(
              f"Invalid 'axis' value {axis}.Choose one of ['rows', 'cols']"
          )
  
      if axis == "cols":
          cols_to_drop: List[str] = []
          for n_col, col in enumerate(self.columns):
              if subset and self.keys()[n_col] not in subset:
                  continue
              # Cast to str because Text is not hashable error
              unique_vals = {str(x) for x in col}
              if ignore_empty and self._fill_value in unique_vals:
                  unique_vals -= {self._fill_value}
              if len(unique_vals) == 1:
                  cols_to_drop.append(self.keys()[n_col])
          self.drop(*cols_to_drop)
  
      elif axis == "rows":
          unique_rows = []
          rows_to_drop: List[int] = []
          for n_row, row in enumerate(self):
              if subset:
                  row = [
                      col
                      for n_col, col in enumerate(row)
                      if self.keys()[n_col] in subset
                  ]
  
              tuple_row = tuple(row)
              if tuple_row in unique_rows:
                  rows_to_drop.append(n_row)
              else:
                  unique_rows.append(tuple_row)
  
          for name in self.keys():
              self._columns[name] = Column(
                  [
                      x
                      for n, x in enumerate(self._columns[name])
                      if n not in rows_to_drop
                  ]
              )
  
imports: from collections import abc
  from itertools import chain, repeat, zip_longest
  from operator import itemgetter
  from typing import TYPE_CHECKING, Any, Dict, ItemsView, Iterable, Iterator, List, Mapping, MutableSequence, Optional, Sequence, Set, Tuple, Union, overload
  from funcy import reraise
label_desc: Use image node_id 32 for calling the TabularData obj's underlying member method code with example usage: obj.drop_duplicates(axis, subset, ignore_empty) without return types