Skip to main content

csv_grid

Python emitter for CsvGrid, the embeddable interactive table of the csv-viewer project: render a pandas DataFrame as a sortable, filterable, type-aware grid in Jupyter, Quarto (.qmd), or any static HTML you generate.

The grid re-infers column types from the data exactly as the viewer app does (numbers right with greater_tables-style formatting, dates ISO and centered, fzf search, equal-risk column widths). NaN / None become blank cells.

Install

uv add csv-grid              # or: pip install csv-grid

or local path install from a clone of this repo:

uv add --editable path/to/csv-viewer/python

The grid's built JS/CSS assets ship inside the package (refreshed by the repo's npm run build).

Use

from csv_grid import show, to_html

show(df)                          # Jupyter / qmd cell: display the grid
show(df, align="llrcr", fmt=[None, None, ",d", "year", ",.2f"])

html = to_html(df, name="results.df", assets="inline")   # fragment string
  • show(df, **options) displays via IPython. Each grid carries the JS + CSS via an idempotent <head> guard (assets="inline", the default), so fragments are self-contained and re-running/clearing a notebook cell can't strip a shared stylesheet. Use assets="https://…/base" to link the assets from a URL instead, or assets=False if they are already on the page.
  • to_html(df, **options) returns a self-contained HTML fragment; fragments compose freely (no need to mark a "first" one).
  • payload(df) returns the {records, columns} dict the grid consumes, if you want to ship data yourself.
  • Options mirror the JS API in snake_case: global_search, column_filters, sortable, status_bar, expand_buttons, align ('llrcr…'), formats/fmt (per-column: a number spec [,][.N](f|d|%|e|s) / 'year' / 'eng', or on a date column a strftime pattern %Y %y %m %d %H %M %S %f%f is 3-digit milliseconds here, not Python's 6-digit microseconds — and %% is a literal %; None = auto). Date columns auto-show their finest present resolution: date-only when no times are present, HH:MM when minutes are, :SS[.fff] down to milliseconds otherwise, with a uniform fractional width per column. An explicit date pattern overrides the auto rule. width_mode ('equal-risk' default, or 'coverage' to maximize the count of fully-shown cells), display_mode ('auto' formatted / 'raw' verbatim), rows (cap the viewport to ~N rows, vertical scroll for the rest) / max_height (raw CSS, e.g. '400px'), render_cap, eager_cells, worker (default False — data is inlined), plus name (status line) and index (include the DataFrame index as leading columns). Dark mode follows the host page (prefers-color-scheme; JupyterLab dark themes included) unless theme="light"/"dark" forces it.
  • Clickable rows/cells (selectable=True): a body click fires a bubbling csvgrid:cellclick DOM event whose detail carries the clicked cell and the whole row keyed by column name (raw + formatted) with the original row index — wire it to HTMX/JS for drill-down. select_mode ('row'/'cell'/'none') controls the highlight; hidden_columns=[…] ships a key column in the payload without displaying it. No Python callback — to_html stays a pure string emitter.
to_html(df, name="transactions", selectable=True,
        select_mode="row", hidden_columns=["trans_id"])

Dates are emitted ISO (yyyy-mm-dd, with hh:mm only when a column has non-midnight times); integral float columns are emitted as integers so the grid's integer/year rules apply.

Release files for csv-grid 3.9.0

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

Source distribution (sdist)

Source distribution for csv-grid 3.9.0
File Size Uploaded
csv_grid-3.9.0.tar.gz 40.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for csv-grid 3.9.0
File Interpreter ABI Platform
csv_grid-3.9.0-py3-none-any.whl Python 3 none any Details

Total release size: 66.3 kB

Release files / csv_grid-3.9.0.tar.gz

Download URL csv_grid-3.9.0.tar.gz
Size 40.0 kB
Tags Source
SHA-256 checksum
How to use checksums
60c900283baafadd32cc63b5c867b95628e995d0a96499a0cdc6d7d88f280b5a
BLAKE2b-256 checksum
How to use checksums
3e259fc25f99a4201ea8cd1d8780bc2bd20c30fa8ca7e40c05773c4706dd9370
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.3

Release files / csv_grid-3.9.0-py3-none-any.whl

Download URL csv_grid-3.9.0-py3-none-any.whl
Size 26.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b38e91ea2a6531968c10791f556b8c0c7f8c27ff67bead9aa5a344af6ca8fe64
BLAKE2b-256 checksum
How to use checksums
e42dee4271cbd03c9338b97ab4f49d35e5bde614f0f0b6b9e61db034eca10ac2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.3

Release history Release notifications | RSS feed

This release

3.9.0 This release

2 release files

3.7.1

2 release files

3.3.1

2 release files

3.3.0

2 release files

3.1.0

2 release files

3.0.7

2 release files

3.0.5

2 release files

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