class_docstr: A table.
  
  The contents of the table can be text or numerical data, a Pandas dataframe,
  or other card components: `Artifact`, `Image`, `Markdown` objects.
  
  Example: Text and artifacts
  ```
  from metaflow.cards import Table, Artifact
  current.card.append(
      Table([
          ['first row', Artifact({'a': 2})],
          ['second row', Artifact(3)]
      ])
  )
  ```
  
  Example: Table from a Pandas dataframe
  ```
  from metaflow.cards import Table
  import pandas as pd
  import numpy as np
  current.card.append(
      Table.from_dataframe(
          pd.DataFrame(
              np.random.randint(0, 100, size=(15, 4)),
              columns=list("ABCD")
          )
      )
  )
  ```
  
  Parameters
  ----------
  data : List[List[str or MetaflowCardComponent]], optional
      List (rows) of lists (columns). Each item can be a string or a `MetaflowCardComponent`.
  headers : List[str], optional
      Optional header row for the table.
class_docstr_tok: ["A","table",".","The","contents","of","the","table","can","be","text","or","numerical","data",",","a","Pandas","dataframe",",","or","other","card","components",":","`","Artifact","`",",","`","Image","`",",","`","Markdown","`","objects",".","Example",":","Text","and","artifacts","``","`","from","metaflow.cards","import","Table",",","Artifact","current.card.append","(","Table","(","[","[","'first","row","'",",","Artifact","(","{","'","a","'",":","2","}",")","]",",","[","'second","row","'",",","Artifact","(","3",")","]","]",")",")","``","`","Example",":","Table","from","a","Pandas","dataframe","``","`","from","metaflow.cards","import","Table","import","pandas","as","pd","import","numpy","as","np","current.card.append","(","Table.from_dataframe","(","pd.DataFrame","(","np.random.randint","(","0",",","100",",","size=","(","15",",","4",")",")",",","columns=list","(","``","ABCD","''",")",")",")",")","``","`","Parameters","--","--","--","--","--","data",":","List","[","List","[","str","or","MetaflowCardComponent","]","]",",","optional","List","(","rows",")","of","lists","(","columns",")",".","Each","item","can","be","a","string","or","a","`","MetaflowCardComponent","`",".","headers",":","List","[","str","]",",","optional","Optional","header","row","for","the","table","."]
code: def _render_subcomponents(self):
      for row in self._data:
          for col in row:
              if isinstance(col, VegaChart):
                  col._chart_inside_table = True
  
      return [
          SectionComponent.render_subcomponents(
              row,
              additional_allowed_types=[
                  str,
                  bool,
                  int,
                  float,
                  dict,
                  list,
                  tuple,
                  type(None),
              ],
              allow_unknowns=True,
          )
          for row in self._data
      ]
  
imports: from typing import Any, List, Optional, Union
  from .basic import LogComponent, ErrorComponent, ArtifactsComponent, TableComponent, ImageComponent, SectionComponent, MarkdownComponent
  from .card import MetaflowCardComponent
  from .convert_to_native_type import TaskToDict, _full_classname
  from .renderer_tools import render_safely
  import uuid
label_desc: Use image node_id 4 for calling the Table obj's underlying member method code with example usage: obj._render_subcomponents() and returns: unknown