docstr: Select data from the search_location table and return it as a pandas DataFrame.
  
  Args:
      query (ast.Select): The SQL query to be executed.
  
  Returns:
      pandas.DataFrame: A pandas DataFrame containing the selected data.
docstr_tok: ["Select","data","from","the","search_location","table","and","return","it","as","a","pandas","DataFrame",".","Args",":","query","(","ast.Select",")",":","The","SQL","query","to","be","executed",".","Returns",":","pandas.DataFrame",":","A","pandas","DataFrame","containing","the","selected","data","."]
code: def select(self, query: ast.Select) -> pd.DataFrame:
      """Select data from the search_location table and return it as a pandas DataFrame.
  
      Args:
          query (ast.Select): The SQL query to be executed.
  
      Returns:
          pandas.DataFrame: A pandas DataFrame containing the selected data.
      """
  
      self.handler.connect()
  
      conditions = extract_comparison_conditions(query.where)
  
      allowed_keys = set(
          [
              "searchQuery",
              "category",
              "phone",
              "address",
              "latLong",
              "radius",
              "radiusUnit",
              "language",
          ]
      )
  
      params = {}
      filters = []
      for op, arg1, arg2 in conditions:
          if op == "or":
              raise NotImplementedError("OR is not supported")
          elif op == "=" and arg1 in allowed_keys:
              params[arg1] = arg2
          elif op != "=":
              raise NotImplementedError(f"Unknown op: {op}")
          else:
              filters.append([op, arg1, arg2])
  
      if query.limit is not None:
          params["max_results"] = query.limit.value
  
      if "searchQuery" not in params and "latLong" not in params:
          # search not works without searchQuery, use 'London'
          params["searchQuery"] = "London"
  
      result = self.handler.call_tripadvisor_searchlocation_api(
          params=params
      )
  
      # filter targets
      columns = []
      for target in query.targets:
          if isinstance(target, ast.Star):
              columns = []
              break
          elif isinstance(target, ast.Identifier):
              columns.append(target.parts[-1])
          else:
              raise NotImplementedError
  
      if len(columns) == 0:
          columns = self.get_columns()
  
      # columns to lower case
      columns = [name.lower() for name in columns]
  
      if len(result) == 0:
          result = pd.DataFrame([], columns=columns)
      else:
          # add absent columns
          for col in set(columns) & set(result.columns) ^ set(columns):
              result[col] = None
  
          # filter by columns
          result = result[columns]
      return result
  
imports: import pandas
  from mindsdb.integrations.libs.api_handler import APITable
  from mindsdb_sql.parser import ast
  from mindsdb.integrations.utilities.sql_utils import extract_comparison_conditions
label_desc: Use image node_id 1 for calling the SearchLocationTable obj's underlying member method code with example usage: obj.select(query) and returns: result