class_docstr: Data model used for storing a batch of frames.
  Internally stored as a pandas DataFrame with columns
  "id" and "data".
  id: integer index of frame
  data: frame as np.array
  
  Arguments:
      frames (DataFrame): pandas Dataframe holding frames data
class_docstr_tok: ["Data","model","used","for","storing","a","batch","of","frames",".","Internally","stored","as","a","pandas","DataFrame","with","columns","''","id","''","and","``","data","''",".","id",":","integer","index","of","frame","data",":","frame","as","np.array","Arguments",":","frames","(","DataFrame",")",":","pandas","Dataframe","holding","frames","data"]
docstr: Takes as input the column list, returns the projection.
  We do a copy for now.
docstr_tok: ["Takes","as","input","the","column","list",",","returns","the","projection",".","We","do","a","copy","for","now","."]
code: def project(self, cols: None) -> Batch:
      """
      Takes as input the column list, returns the projection.
      We do a copy for now.
      """
      cols = cols or []
      verified_cols = [c for c in cols if c in self._frames]
      unknown_cols = list(set(cols) - set(verified_cols))
      assert len(unknown_cols) == 0, unknown_cols
      return Batch(self._frames[verified_cols])
  
imports: from typing import Callable, Iterable, List, TypeVar, Union
  import numpy
  import pandas
  from evadb.expression.abstract_expression import ExpressionType
  from evadb.parser.alias import Alias
  from evadb.utils.generic_utils import PickleSerializer
  from evadb.utils.logging_manager import logger
label_desc: Use image node_id 32 for calling the Batch obj's underlying member method code with example usage: obj.project(cols) and returns: Batch