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. Useassets="https://…/base"to link the assets from a URL instead, orassets=Falseif 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—%fis 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:MMwhen 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), plusname(status line) andindex(include the DataFrame index as leading columns). Dark mode follows the host page (prefers-color-scheme; JupyterLab dark themes included) unlesstheme="light"/"dark"forces it. - Clickable rows/cells (
selectable=True): a body click fires a bubblingcsvgrid:cellclickDOM event whosedetailcarries 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_htmlstays 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)
| File | Size | Uploaded | |
|---|---|---|---|
| csv_grid-3.9.0.tar.gz | 40.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|