Table

class marimo.ui.table(data: ListOrTuple[str | int | float | bool | MIME | None] | ListOrTuple[Dict[str, JSONType]] | Dict[str, ListOrTuple[JSONType]] | 'IntoDataFrame', pagination: bool | None = None, selection: Literal['single', 'multi'] | None = 'multi', page_size: int = 10, show_column_summaries: bool | None = None, format_mapping: Dict[str, str | Callable[..., Any]] | None = None, freeze_columns_left: Sequence[str] | None = None, freeze_columns_right: Sequence[str] | None = None, text_justify_columns: Dict[str, Literal['left', 'center', 'right']] | None = None, wrapped_columns: List[str] | None = None, show_download: bool = True, max_columns: int | None = 50, *, label: str = '', on_change: Callable[[List[JSONType] | Dict[str, ListOrTuple[JSONType]] | 'IntoDataFrame'], None] | None = None, _internal_column_charts_row_limit: int | None = None, _internal_summary_row_limit: int | None = None, _internal_total_rows: int | Literal['too_many'] | None = None)

A table component with selectable rows. Get the selected rows with table.value.

The table data can be supplied a:

  1. a list of dicts, with one dict for each row, keyed by column names;

  2. a list of values, representing a table with a single column;

  3. a Pandas dataframe; or

  4. a Polars dataframe; or

  5. an Ibis dataframe; or

  6. a PyArrow table.

Examples.

Create a table from a list of dicts, one for each row.

table = mo.ui.table(
    data=[
        {"first_name": "Michael", "last_name": "Scott"},
        {"first_name": "Dwight", "last_name": "Schrute"},
    ],
    label="Users",
)

Create a table from a single column of data:

table = mo.ui.table( data=[ {‘first_name’: ‘Michael’, ‘last_name’: ‘Scott’}, {‘first_name’: ‘Dwight’, ‘last_name’: ‘Schrute’} ], label=‘Users’ )

Create a table from a dataframe:

# df is a Pandas or Polars dataframe
table = mo.ui.table(
    data=df,
    # use pagination when your table has many rows
    pagination=True,
    label="Dataframe",
)

Create a table with format mapping:

# format_mapping is a dict keyed by column names,
# with values as formatting functions or strings
def format_name(name):
    return name.upper()


table = mo.ui.table(
    data=[
        {"first_name": "Michael", "last_name": "Scott", "age": 45},
        {"first_name": "Dwight", "last_name": "Schrute", "age": 40},
    ],
    format_mapping={
        "first_name": format_name,  # Use callable to format first names
        "age": "{:.1f}".format,  # Use string format for age
    },
    label="Format Mapping",
)

In each case, access the table data with table.value.

Attributes.

  • value: the selected rows, in the same format as the original data, or None if no selection

  • data: the original table data

Initialization Args.

  • data: Values can be primitives (str, int, float, bool, or None) or marimo elements: e.g. mo.ui.button(...), mo.md(...), mo.as_html(...), etc. Data can be passed in many ways:

    • as dataframes: a pandas dataframe, a polars dataframe

    • as rows: a list of dicts, where each dict represents a row in the table

    • as columns: a dict keyed by column names, where the value of each entry is a list representing a column

    • as a single column: a list of values

  • pagination: whether to paginate; if False, all rows will be shown defaults to True when above 10 rows, False otherwise

  • selection: ‘single’ or ‘multi’ to enable row selection, or None to disable

  • page_size: the number of rows to show per page. defaults to 10

  • show_column_summaries: whether to show column summaries defaults to True when the table has less than 40 columns, False otherwise

  • show_download: whether to show the download button defaults to True for dataframes, False otherwise

  • format_mapping: a mapping from column names to formatting strings or functions

  • freeze_columns_left: list of column names to freeze on the left

  • freeze_columns_right: list of column names to freeze on the right

  • text_justify_columns: dictionary of column names to text justification options: left, center, right

  • wrapped_columns: list of column names to wrap

  • label: markdown label for the element

  • on_change: optional callback to run when this element’s value changes

  • max_columns: maximum number of columns to display, defaults to 50. Set to None to show all columns.

Public methods

download_as(args)

get_column_summaries(args)

search(args)

Inherited from UIElement

form([label, bordered, loading, ...])

Create a submittable form out of this UIElement.

send_message(message, buffers)

Send a message to the element rendered on the frontend from the backend.

Inherited from Html

batch(**elements)

Convert an HTML object with templated text into a UI element.

center()

Center an item.

right()

Right-justify.

left()

Left-justify.

callout([kind])

Create a callout containing this HTML element.

style([style])

Wrap an object in a styled container.

Public Data Attributes:

data

Inherited from UIElement

value

The element’s current value.

Inherited from Html

text

A string of HTML representing this element.