code: def setFilter(self, search):
          
          if not isinstance(search, DataSearch):
              raise TypeError('The given parameter must an `qtpandas.DataSearch` object')
  
          self._search = search
  
          self.layoutAboutToBeChanged.emit()
  
          if self._dataFrameOriginal is not None:
              self._dataFrame = self._dataFrameOriginal
          self._dataFrameOriginal = self._dataFrame.copy()
  
          self._search.setDataFrame(self._dataFrame)
          searchIndex, valid = self._search.search()
  
          if valid:
              self._dataFrame = self._dataFrame[searchIndex]
              self.layoutChanged.emit()
          else:
              self.clearFilter()
              self.layoutChanged.emit()
  
          self.dataFrameChanged.emit()
docs: Apply a filter and hide rows.
  
          The filter must be a `DataSearch` object, which evaluates a python
          expression.
          If there was an error while parsing the expression, the data will remain
          unfiltered.
  
          Args:
              search(qtpandas.DataSearch): data search object to use.
  
          Raises:
              TypeError: An error is raised, if the given parameter is not a
                  `DataSearch` object.