Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

rundown

A quick, good-looking overview of a pandas or polars DataFrame for notebooks (and Dash).

Installation

pip install rundown

Usage

In Jupyter (Lab, Notebook or VS Code), or anywhere else that renders HTML:

import pandas as pd
import seaborn as sns
import rundown

titanic = sns.load_dataset("titanic")
titanic.rundown()

rundown

Every column gets a margin viz above it: a histogram for numbers, dates and durations, or its top values for categories, text, booleans and low-cardinality numbers. Underneath are the null rate and a few key stats (hover over a bar for exact counts), then a sample of rows. The header stays put while you scroll. Click a column name to sort the rows, or type in the filter box.

It's plain HTML and inline SVG (no matplotlib, no JavaScript dependencies), so it's fast and small. A 5-million-row frame renders in about 2 seconds as ~45 KB of HTML. On frames with more than max_profile_rows rows (1M by default), stats come from a random sample.

Sparklines

sparklines=True adds a sparkline under each numeric, datetime and boolean column, plotting its values in row order. It helps with time series and with spotting sorting, drift or gaps. Long columns are downsampled to min/mean/max buckets, so the shape survives at any size.

ticks.rundown(sparklines=True)

rundown with sparklines

Options

df.rundown(
    n=10,                    # rows to show
    sample="random",         # "random" (kept in order), "head" or "tail"
    sparklines=False,
    max_columns=50,          # None for all
    max_height="480px",      # the table scrolls inside this height
    max_chars=40,            # longer cell text is truncated (full text on hover)
    bins=20,
    top_k=5,                 # top values shown for categorical columns
    max_profile_rows=1_000_000,
    random_state=None,
)

pd.Series.rundown() works too. The result displays itself in a notebook; use .to_html() or .save("rundown.html") to use it elsewhere.

polars

import rundown also adds .rundown() to polars DataFrames and Series when polars is installed. Headers show polars dtypes (i64, str, ...). pyarrow isn't needed. Only the first max_columns columns are converted for profiling. Call .collect() on a LazyFrame first.

import polars as pl
pl.read_parquet("trips.parquet").rundown(sparklines=True)

Other frames work through the plain function rundown.rundown(obj) if they have a to_pandas() method or support the Arrow PyCapsule interface (pandas 3, needs pyarrow).

Dash

No custom component is needed. .to_dash() returns an html.Iframe that sizes itself to its content, with sorting and filtering still working:

from dash import Dash, html
app = Dash()
app.layout = html.Div([df.rundown(sparklines=True).to_dash(id="summary")])

Inside the iframe it uses the light theme, because the notebook theme variables don't reach it.

Development

uv sync
uv run pytest

Releasing

The Release workflow publishes to PyPI based on the version in pyproject.toml. It needs a PYPI_API_TOKEN Actions secret.

  • Merge to main: if that version isn't tagged yet, it's published to PyPI and tagged (v<version>) with a GitHub release. To release, bump the version (uv version --bump patch) and merge to main.
  • Merge to develop: a dev pre-release <version>.dev<N> is published (N is the workflow run number). If the version is already released, dev builds count towards the next patch version. Install one with pip install --pre rundown.

Metadata

Release files for rundown 0.3.0.dev8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rundown 0.3.0.dev8
File Size Uploaded Provenance Actions
rundown-0.3.0.dev8.tar.gz 20.2 kB Without provenance Details for rundown-0.3.0.dev8.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for rundown 0.3.0.dev8
File Interpreter ABI Platform Actions
rundown-0.3.0.dev8-py3-none-any.whl Python 3 none any Details for rundown-0.3.0.dev8-py3-none-any.whl

Total release size: 37.8 kB

Release files / rundown-0.3.0.dev8.tar.gz

Download URL rundown-0.3.0.dev8.tar.gz
Size 20.2 kB
Tags Source
SHA-256 checksum
How to use checksums
4fccd86bf93deb74a69053354c69884b4eb1f440fd880388943f429f629bbcc9
BLAKE2b-256 checksum
How to use checksums
08f2fdfd91db584e62f36d38a7eb25cbcafdf6336bb9cf688c09edc93b9d6119
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / rundown-0.3.0.dev8-py3-none-any.whl

Download URL rundown-0.3.0.dev8-py3-none-any.whl
Size 17.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1cab9851e83db632ff1b5f82f5a6ceb277633742d233f256e41a5a68d9dc126d
BLAKE2b-256 checksum
How to use checksums
696d57e1509bd2577dd3fa1ddc06222a83030d96895ff874f1df01b383318e57
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Security for rundown 0.3.0.dev8

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page