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
Pandas, Polars, PyArrow, or Ibis dataframe
Callback when dataframe is transformed
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.