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: Concat a list of batches.
  Notice: only frames are considered.
docstr_tok: ["Concat","a","list","of","batches",".","Notice",":","only","frames","are","considered","."]
code: def concat(cls, batch_list: Iterable[Batch], copy=True) -> Batch:
      """Concat a list of batches.
      Notice: only frames are considered.
      """
  
      # pd.concat will convert generator into list, so it does not hurt
      # if we convert ourselves.
      frame_list = list([batch.frames for batch in batch_list])
      if len(frame_list) == 0:
          return Batch()
      frame = pd.concat(frame_list, ignore_index=True, copy=copy)
  
      return Batch(frame)
  
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 35 for calling the Batch obj's underlying member method code with example usage: obj.concat(cls, batch_list, copy) and returns: Batch, Batch