Skip to main content

mo.ui.dataframe

Display and interact with dataframes from pandas, polars, pyarrow, and more.

Signature

mo.ui.dataframe(
    df: DataFrameType,
    on_change: Callable[[DataFrameType], None] | None = None,
    page_size: int = 5,
    limit: int | None = None,
    show_download: bool = True,
    *,
    format_mapping: dict | None = None,
    download_csv_encoding: str | None = None,
    download_csv_separator: str | None = None,
    download_json_ensure_ascii: bool = True,
    lazy: bool | None = None
)

Parameters

df
DataFrame
required
Pandas, Polars, PyArrow, or Ibis dataframe
on_change
Callable
Callback when dataframe is transformed
page_size
int
default:"5"
Rows per page
limit
int
Maximum rows to display
show_download
bool
default:"True"
Show download button
format_mapping
dict
Custom column formatters
lazy
bool
Use lazy evaluation for large dataframes

Features

  • Filter: Filter rows by column values
  • Sort: Sort by one or more columns
  • Search: Full-text search across all columns
  • Select columns: Choose which columns to display
  • Aggregate: Group by and aggregate data
  • Download: Export as CSV, JSON, or Parquet
  • Code generation: Generate Python code for transformations

Examples

import marimo as mo
import pandas as pd

# Basic dataframe
df = pd.DataFrame({
    "name": ["Alice", "Bob", "Charlie"],
    "age": [30, 25, 35],
    "salary": [70000, 50000, 90000]
})

df_viewer = mo.ui.dataframe(df)
df_viewer
# Access transformed dataframe
transformed = df_viewer.value
mo.md(f"Rows: {len(transformed)}")
# With custom formatting
from datetime import date

df = pd.DataFrame({
    "date": [date(2024, 1, 1), date(2024, 1, 2)],
    "value": [1234.56, 7890.12]
})

df_viewer = mo.ui.dataframe(
    df,
    format_mapping={
        "value": "${:,.2f}"
    }
)
For very large dataframes, set lazy=True to use lazy evaluation and improve performance.

Build docs developers (and LLMs) love