df2tables


Namedf2tables JSON
Version 0.1.8 PyPI version JSON
download
home_pageNone
Summarydf2tables: Pandas and Polars DataFrames to Interactive DataTables
upload_time2025-10-11 09:35:52
maintainerNone
docs_urlNone
authorNone
requires_pythonNone
licenseMIT License Copyright (c) 2024 Tomasz Sługocki Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
keywords datatables html javascript pandas polars
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # df2tables - Pandas & Polars DataFrames to Interactive HTML Tables

[![PyPI version](https://img.shields.io/pypi/v/df2tables.svg)](https://pypi.org/project/df2tables/)

`df2tables` is a Python utility for exporting **Pandas** and **Polars** DataFrames into interactive HTML tables using [DataTables](https://datatables.net/) - a powerful JavaScript library.  
It’s built to embed seamlessly into Flask, Django, FastAPI, or any web framework.

By rendering tables directly from JavaScript arrays, this tool delivers **fast performance and compact file sizes**, enabling smooth browsing of large datasets while maintaining full responsiveness.

**Minimal dependencies**: only `pandas` ***or*** `polars` (you don’t need pandas installed if using polars).

Converting a DataFrame to an interactive table takes just one function call:

```python
render(df, **kwargs) 
# or for web frameworks:
render_inline(df, **kwargs)
```

## Features

- Converts `pandas` and `polars` dataframes interactive standalone HTML tables
- **Web Framework Ready**: Specifically designed for easy embedding in Flask, Django, FastAPI, and other web frameworks
- Browse **large datasets** using filters and sorting 
- Works **independently of Jupyter**  or live server (though [notebook](#rendering-in-notebook) rendering  is supported) 
- Useful for training dataset inspection and feature engineering: Quickly browse through large datasets, identify outliers, and data quality issues interactively
- **Customization**: [Configuring DataTables from Python](#customization-configuring-datatables-from-python) *(new)*

## Screenshots

![df2tables demo with 1,000,000 rows](https://github.com/ts-kontakt/df2tables/blob/main/df2tables-big.gif?raw=true)

A standalone HTML file containing a JavaScript array as data source for DataTables has several advantages. For example, you can browse quite large datasets locally.

The column control feature provides dropdown filters for categorical data and search functionality for text columns, enhancing data exploration capabilities through the excellent [DataTables Column Control extension](https://datatables.net/extensions/columncontrol/).

*Note: By default, filtering is enabled for all non-numeric columns.*

## Quick Start

The simplest function call with default arguments is:

```python
df2tables.render(df, to_file='df.html')
```

## Installation

```bash
pip install df2tables
```

### Sample DataFrame

```python
#render sample DataFrame
html_string = df2t.render_sample_df(to_file="sample_table.html")
```
### Rendering in notebook
```python
from df2tables import  render_nb

render_nb(df) #show interactive table in jupyter notebook
```
*Note: Notebook rendering is currently supported in Jupyter,  VS Code notebooks and marimo*

## Main Functions
### render
```python
df2t.render(
    df: pd.DataFrame,
    to_file: Optional[str] = None,
    title: str = "Title",
    precision: int = 2,
    num_html: List[str] = None,
    startfile: bool = True,
    templ_path: str = TEMPLATE_PATH,
    load_column_control: bool = True,
    js_opts: Optional[dict] = None,
    display_logo: bool = True
) -> Union[str, file_object]
```
**Parameters:**
- `df`: Input pandas DataFrame
- `to_file`: Output HTML file path. If None, returns HTML string instead of writing file
- `title`: Title for the HTML table
- `precision`: Number of decimal places for floating-point numbers
- `num_html`: List of numeric column names to render with color-coded HTML formatting (negative values in red)
- `startfile`: If True, automatically opens the generated HTML file in default browser
- `templ_path`: Path to custom HTML template (uses default if not specified)
- `load_column_control`: If True, integrates the [DataTables Column Control extension](https://datatables.net/extensions/columncontrol/) programmatically for enhanced filtering and search capabilities (default: True)
- `js_opts`: Dictionary of [DataTables configuration options](https://datatables.net/reference/option/) to customize table behavior (e.g., pagination, scrolling, layout, language).(default: None)
- `display_logo`: If True, displays DataTables logo (default: True)

**Returns:**
- HTML string if `to_file=None`
- File object if `to_file` is specified

### render_inline

```python
df2t.render_inline(
    df: pd.DataFrame, 
    table_attrs: Dict = None,
    **kwargs
) -> str
```

**Parameters:**

This function is designed for integration with web applications and has the following characteristics:

- Returns only the `<table>` markup and the associated JavaScript
- Excludes `<html>`, `<head>`, and `<body>` tags
- Useful for pages with multiple tables, as you can assign unique IDs via the `table_attrs` dictionary (e.g., `{'id': 'my-unique-table'}`)
- **Important**: This function does not include jQuery or DataTables library dependencies. You must include them manually in your host HTML page for the table to function correctly

Some key arguments are not applicable, such as `title` or `display_logo`, because the returned HTML contains only the table and JavaScript.

The **new** additional **`table_attrs`** argument accepts a dictionary of HTML table attributes, such as an ID or CSS class. This is especially useful for multiple tables on a single page (each must have a different ID).

See an example of multiple tables with different configuration options placed in separate tabs (jQuery UI Tabs): [flask_multiple_tables_tabs.py](https://github.com/ts-kontakt/df2tables/blob/main/flask_multiple_tables_tabs.py)


### Minimal Flask Example
Here's a complete, minimal **working** Flask application that demonstrates how to properly embed a DataTable with all required dependencies:

```python
import df2tables as df2t
from flask import Flask, render_template_string

app = Flask(__name__)

@app.route("/")
def home():
    # Generate sample data (or use your own DataFrame)
    df = df2t.get_sample_df()
    df_title = "DataFrame Rendered as DataTable inline in <strong>Flask</strong>"

    string_datatable = df2t.render_inline(df)

    # Embed in a complete HTML template with all required dependencies
    return render_template_string(
        """
        <!DOCTYPE html>
        <html>
        <head>
            <title>Flask Data Dashboard</title>
            <meta name="viewport" content="width=device-width, initial-scale=1">
            
            <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
            <link href="https://cdn.datatables.net/2.3.4/css/dataTables.dataTables.min.css" rel="stylesheet">
            <script src="https://cdn.datatables.net/2.3.4/js/dataTables.min.js"></script><!--[column_control-->
            <link href="https://cdn.datatables.net/columncontrol/1.1.0/css/columnControl.dataTables.min.css" rel="stylesheet">
            <script src="https://cdn.datatables.net/columncontrol/1.1.0/js/dataTables.columnControl.min.js"></script><!--column_control]-->

            <!-- Optional: PureCSS for styling -->
            <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/purecss@3.0.0/build/pure-min.css">
        </head>
        <body style="background-color: #f4f4f4;">
            <div style="background-color: #fff; padding: 20px; margin: 20px;">
                <h1>My Flask Data Dashboard</h1>
                {{ inline_datatable | safe }}
            </div>
        </body>
        </html>
        """,
        inline_datatable=string_datatable,
    )

if __name__ == "__main__":
    app.run(debug=True)
```
*Note: Pandas DataFrame indexes are not rendered by default. If you want to enable indexes in an HTML table, simply call `df2tables.render(df.reset_index(), args...)`*

## Customization: Configuring DataTables from Python

You can now customize DataTables behavior directly from Python by passing configuration options through the new `js_opts` parameter. This allows you to control [DataTables options](https://datatables.net/reference/option/) and [features](https://datatables.net/reference/feature/) without modifying the HTML template. 

### Basic Usage

Simply pass a dictionary of DataTables options to the `js_opts` parameter in the `render` or `render_inline` function.

### Examples


#### 1.  Customize Layout and Language

Rearrange control elements (such as the search bar and info display) using the `layout` option, or localize text:
```python
custom_cfg = {
    "language": {
        "searchPlaceholder": "Search in all text columns"
    },
    "pageLength": 25, # number of table rows showing
    "layout": {
        "topStart": "info",
        "top1Start": "pageLength",
        "topEnd": "search", 
        "bottomEnd": "paging"
    }
}
df2t.render(df, js_opts=custom_cfg, to_file="localized_table.html")

```
#### 2. Replace Paging with Scrolling

Disable pagination and enable vertical and horizontal scrolling for easier navigation of large datasets.

_Note_: Using `scrollY` with disabled `paging` can be slow for large DataFrames.
```python
scroll_cfg = {
    "paging": False, # slow for large tables
    "scrollCollapse": False,
    "scrollY": '50vh',  
    "scrollX": "70vw"
}
df2t.render(df, js_opts=scroll_cfg, to_file="scrolling_table.html")
```



### Error Handling

Invalid keys are ignored by DataTables, so malformed or non-existent options **usually** will not break table rendering.

**Note**: While invalid keys should be ignored, using a valid key with an incorrect *value type* may still cause an error in the browser's JavaScript console.

### Available Configuration Options

**Important Notes**

Some configuration options require additional DataTables extensions or plugins (e.g., Buttons, FixedHeader). At this time, such plugin-dependent options are not yet supported.

For best results, start with core features such as `layout` or `language` options before exploring more advanced configurations.

For a complete list of available settings, refer to the official DataTables documentation and:
https://datatables.net/examples/

It’s best to start with the core DataTables Features before adding advanced configurations.

  * [Feature Reference](https://datatables.net/reference/feature/)
  * [Configuration Options Reference](https://datatables.net/reference/option/)
  * [Layout Configuration](https://datatables.net/reference/option/layout)
  * [Language configuration ](https://datatables.net/reference/option/language)


### Column Name Formatting

For better readability in table headers, `df2tables` automatically converts underscores to spaces in column names. This improves word wrapping and prevents excessively wide columns.

To disable this automatic word wrapping behavior, add the following CSS to your custom template:

```css
span.dt-column-title { 
    white-space: nowrap; 
}
```

### Bulk Dataset Processing

For exploratory data analysis across multiple datasets, you can generate tables programmatically. 
The example below uses the [vega_datasets](https://github.com/altair-viz/vega_datasets) package, which provides easy access to a variety of sample datasets commonly used in data visualization and analysis.

*Note: Install vega_datasets with `pip install vega_datasets` to run this example.*

[Quick Browse First 10 Vega Datasets](https://github.com/ts-kontakt/df2tables/blob/main/bulk_dataset_processing.py)



### Error Handling

The module includes error handling for:

- **JSON serialization**: Custom encoder handles complex pandas or Python data types
- **Column compatibility**: Automatically converts problematic column types to string representation

### Offline Usage
*Note: "Offline" viewing assumes internet connectivity for CDN resources (DataTables, jQuery, PureCSS, [DataTables Column Control extension](https://datatables.net/extensions/columncontrol/)). For truly offline usage, modify the template to reference local copies of these libraries instead of CDN links.*

## Appendix: Template Customization

Templates use [comnt](https://github.com/ts-kontakt/comnt), a minimal markup system based on HTML/JS comments.

### Custom Templates

Copy and modify `datatable_templ.html` to apply custom styling or libraries, then pass the new template path to `templ_path`.

### Handle Pandas MultiIndex Columns (Experimental)

MultiIndex columns are automatically flattened with underscore separation.

## License

MIT License  
© Tomasz Sługocki

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "df2tables",
    "maintainer": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "keywords": "DataTables, HTML, Javascript, Pandas, Polars",
    "author": null,
    "author_email": "Tomasz S\u0142ugocki <ts.kontakt@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/49/0c/b5c5d9a7170aacf50baf141237033911fe20556f1c2b2be759ee9a5389f1/df2tables-0.1.8.tar.gz",
    "platform": null,
    "description": "# df2tables - Pandas & Polars DataFrames to Interactive HTML Tables\n\n[![PyPI version](https://img.shields.io/pypi/v/df2tables.svg)](https://pypi.org/project/df2tables/)\n\n`df2tables` is a Python utility for exporting **Pandas** and **Polars** DataFrames into interactive HTML tables using [DataTables](https://datatables.net/) - a powerful JavaScript library.  \nIt\u2019s built to embed seamlessly into Flask, Django, FastAPI, or any web framework.\n\nBy rendering tables directly from JavaScript arrays, this tool delivers **fast performance and compact file sizes**, enabling smooth browsing of large datasets while maintaining full responsiveness.\n\n**Minimal dependencies**: only `pandas` ***or*** `polars` (you don\u2019t need pandas installed if using polars).\n\nConverting a DataFrame to an interactive table takes just one function call:\n\n```python\nrender(df, **kwargs) \n# or for web frameworks:\nrender_inline(df, **kwargs)\n```\n\n## Features\n\n- Converts `pandas` and `polars` dataframes interactive standalone HTML tables\n- **Web Framework Ready**: Specifically designed for easy embedding in Flask, Django, FastAPI, and other web frameworks\n- Browse **large datasets** using filters and sorting \n- Works **independently of Jupyter**  or live server (though [notebook](#rendering-in-notebook) rendering  is supported) \n- Useful for training dataset inspection and feature engineering: Quickly browse through large datasets, identify outliers, and data quality issues interactively\n- **Customization**: [Configuring DataTables from Python](#customization-configuring-datatables-from-python) *(new)*\n\n## Screenshots\n\n![df2tables demo with 1,000,000 rows](https://github.com/ts-kontakt/df2tables/blob/main/df2tables-big.gif?raw=true)\n\nA standalone HTML file containing a JavaScript array as data source for DataTables has several advantages. For example, you can browse quite large datasets locally.\n\nThe column control feature provides dropdown filters for categorical data and search functionality for text columns, enhancing data exploration capabilities through the excellent [DataTables Column Control extension](https://datatables.net/extensions/columncontrol/).\n\n*Note: By default, filtering is enabled for all non-numeric columns.*\n\n## Quick Start\n\nThe simplest function call with default arguments is:\n\n```python\ndf2tables.render(df, to_file='df.html')\n```\n\n## Installation\n\n```bash\npip install df2tables\n```\n\n### Sample DataFrame\n\n```python\n#render sample DataFrame\nhtml_string = df2t.render_sample_df(to_file=\"sample_table.html\")\n```\n### Rendering in notebook\n```python\nfrom df2tables import  render_nb\n\nrender_nb(df) #show interactive table in jupyter notebook\n```\n*Note: Notebook rendering is currently supported in Jupyter,  VS Code notebooks and marimo*\n\n## Main Functions\n### render\n```python\ndf2t.render(\n    df: pd.DataFrame,\n    to_file: Optional[str] = None,\n    title: str = \"Title\",\n    precision: int = 2,\n    num_html: List[str] = None,\n    startfile: bool = True,\n    templ_path: str = TEMPLATE_PATH,\n    load_column_control: bool = True,\n    js_opts: Optional[dict] = None,\n    display_logo: bool = True\n) -> Union[str, file_object]\n```\n**Parameters:**\n- `df`: Input pandas DataFrame\n- `to_file`: Output HTML file path. If None, returns HTML string instead of writing file\n- `title`: Title for the HTML table\n- `precision`: Number of decimal places for floating-point numbers\n- `num_html`: List of numeric column names to render with color-coded HTML formatting (negative values in red)\n- `startfile`: If True, automatically opens the generated HTML file in default browser\n- `templ_path`: Path to custom HTML template (uses default if not specified)\n- `load_column_control`: If True, integrates the [DataTables Column Control extension](https://datatables.net/extensions/columncontrol/) programmatically for enhanced filtering and search capabilities (default: True)\n- `js_opts`: Dictionary of [DataTables configuration options](https://datatables.net/reference/option/) to customize table behavior (e.g., pagination, scrolling, layout, language).(default: None)\n- `display_logo`: If True, displays DataTables logo (default: True)\n\n**Returns:**\n- HTML string if `to_file=None`\n- File object if `to_file` is specified\n\n### render_inline\n\n```python\ndf2t.render_inline(\n    df: pd.DataFrame, \n    table_attrs: Dict = None,\n    **kwargs\n) -> str\n```\n\n**Parameters:**\n\nThis function is designed for integration with web applications and has the following characteristics:\n\n- Returns only the `<table>` markup and the associated JavaScript\n- Excludes `<html>`, `<head>`, and `<body>` tags\n- Useful for pages with multiple tables, as you can assign unique IDs via the `table_attrs` dictionary (e.g., `{'id': 'my-unique-table'}`)\n- **Important**: This function does not include jQuery or DataTables library dependencies. You must include them manually in your host HTML page for the table to function correctly\n\nSome key arguments are not applicable, such as `title` or `display_logo`, because the returned HTML contains only the table and JavaScript.\n\nThe **new** additional **`table_attrs`** argument accepts a dictionary of HTML table attributes, such as an ID or CSS class. This is especially useful for multiple tables on a single page (each must have a different ID).\n\nSee an example of multiple tables with different configuration options placed in separate tabs (jQuery UI Tabs): [flask_multiple_tables_tabs.py](https://github.com/ts-kontakt/df2tables/blob/main/flask_multiple_tables_tabs.py)\n\n\n### Minimal Flask Example\nHere's a complete, minimal **working** Flask application that demonstrates how to properly embed a DataTable with all required dependencies:\n\n```python\nimport df2tables as df2t\nfrom flask import Flask, render_template_string\n\napp = Flask(__name__)\n\n@app.route(\"/\")\ndef home():\n    # Generate sample data (or use your own DataFrame)\n    df = df2t.get_sample_df()\n    df_title = \"DataFrame Rendered as DataTable inline in <strong>Flask</strong>\"\n\n    string_datatable = df2t.render_inline(df)\n\n    # Embed in a complete HTML template with all required dependencies\n    return render_template_string(\n        \"\"\"\n        <!DOCTYPE html>\n        <html>\n        <head>\n            <title>Flask Data Dashboard</title>\n            <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n            \n            <script src=\"https://code.jquery.com/jquery-3.7.1.min.js\"></script>\n            <link href=\"https://cdn.datatables.net/2.3.4/css/dataTables.dataTables.min.css\" rel=\"stylesheet\">\n            <script src=\"https://cdn.datatables.net/2.3.4/js/dataTables.min.js\"></script><!--[column_control-->\n            <link href=\"https://cdn.datatables.net/columncontrol/1.1.0/css/columnControl.dataTables.min.css\" rel=\"stylesheet\">\n            <script src=\"https://cdn.datatables.net/columncontrol/1.1.0/js/dataTables.columnControl.min.js\"></script><!--column_control]-->\n\n            <!-- Optional: PureCSS for styling -->\n            <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/purecss@3.0.0/build/pure-min.css\">\n        </head>\n        <body style=\"background-color: #f4f4f4;\">\n            <div style=\"background-color: #fff; padding: 20px; margin: 20px;\">\n                <h1>My Flask Data Dashboard</h1>\n                {{ inline_datatable | safe }}\n            </div>\n        </body>\n        </html>\n        \"\"\",\n        inline_datatable=string_datatable,\n    )\n\nif __name__ == \"__main__\":\n    app.run(debug=True)\n```\n*Note: Pandas DataFrame indexes are not rendered by default. If you want to enable indexes in an HTML table, simply call `df2tables.render(df.reset_index(), args...)`*\n\n## Customization: Configuring DataTables from Python\n\nYou can now customize DataTables behavior directly from Python by passing configuration options through the new `js_opts` parameter. This allows you to control [DataTables options](https://datatables.net/reference/option/) and [features](https://datatables.net/reference/feature/) without modifying the HTML template. \n\n### Basic Usage\n\nSimply pass a dictionary of DataTables options to the `js_opts` parameter in the `render` or `render_inline` function.\n\n### Examples\n\n\n#### 1.  Customize Layout and Language\n\nRearrange control elements (such as the search bar and info display) using the `layout` option, or localize text:\n```python\ncustom_cfg = {\n    \"language\": {\n        \"searchPlaceholder\": \"Search in all text columns\"\n    },\n    \"pageLength\": 25, # number of table rows showing\n    \"layout\": {\n        \"topStart\": \"info\",\n        \"top1Start\": \"pageLength\",\n        \"topEnd\": \"search\", \n        \"bottomEnd\": \"paging\"\n    }\n}\ndf2t.render(df, js_opts=custom_cfg, to_file=\"localized_table.html\")\n\n```\n#### 2. Replace Paging with Scrolling\n\nDisable pagination and enable vertical and horizontal scrolling for easier navigation of large datasets.\n\n_Note_: Using `scrollY` with disabled `paging` can be slow for large DataFrames.\n```python\nscroll_cfg = {\n    \"paging\": False, # slow for large tables\n    \"scrollCollapse\": False,\n    \"scrollY\": '50vh',  \n    \"scrollX\": \"70vw\"\n}\ndf2t.render(df, js_opts=scroll_cfg, to_file=\"scrolling_table.html\")\n```\n\n\n\n### Error Handling\n\nInvalid keys are ignored by DataTables, so malformed or non-existent options **usually** will not break table rendering.\n\n**Note**: While invalid keys should be ignored, using a valid key with an incorrect *value type* may still cause an error in the browser's JavaScript console.\n\n### Available Configuration Options\n\n**Important Notes**\n\nSome configuration options require additional DataTables extensions or plugins (e.g., Buttons, FixedHeader). At this time, such plugin-dependent options are not yet supported.\n\nFor best results, start with core features such as `layout` or `language` options before exploring more advanced configurations.\n\nFor a complete list of available settings, refer to the official DataTables documentation and:\nhttps://datatables.net/examples/\n\nIt\u2019s best to start with the core DataTables Features before adding advanced configurations.\n\n  * [Feature Reference](https://datatables.net/reference/feature/)\n  * [Configuration Options Reference](https://datatables.net/reference/option/)\n  * [Layout Configuration](https://datatables.net/reference/option/layout)\n  * [Language configuration ](https://datatables.net/reference/option/language)\n\n\n### Column Name Formatting\n\nFor better readability in table headers, `df2tables` automatically converts underscores to spaces in column names. This improves word wrapping and prevents excessively wide columns.\n\nTo disable this automatic word wrapping behavior, add the following CSS to your custom template:\n\n```css\nspan.dt-column-title { \n    white-space: nowrap; \n}\n```\n\n### Bulk Dataset Processing\n\nFor exploratory data analysis across multiple datasets, you can generate tables programmatically. \nThe example below uses the [vega_datasets](https://github.com/altair-viz/vega_datasets) package, which provides easy access to a variety of sample datasets commonly used in data visualization and analysis.\n\n*Note: Install vega_datasets with `pip install vega_datasets` to run this example.*\n\n[Quick Browse First 10 Vega Datasets](https://github.com/ts-kontakt/df2tables/blob/main/bulk_dataset_processing.py)\n\n\n\n### Error Handling\n\nThe module includes error handling for:\n\n- **JSON serialization**: Custom encoder handles complex pandas or Python data types\n- **Column compatibility**: Automatically converts problematic column types to string representation\n\n### Offline Usage\n*Note: \"Offline\" viewing assumes internet connectivity for CDN resources (DataTables, jQuery, PureCSS, [DataTables Column Control extension](https://datatables.net/extensions/columncontrol/)). For truly offline usage, modify the template to reference local copies of these libraries instead of CDN links.*\n\n## Appendix: Template Customization\n\nTemplates use [comnt](https://github.com/ts-kontakt/comnt), a minimal markup system based on HTML/JS comments.\n\n### Custom Templates\n\nCopy and modify `datatable_templ.html` to apply custom styling or libraries, then pass the new template path to `templ_path`.\n\n### Handle Pandas MultiIndex Columns (Experimental)\n\nMultiIndex columns are automatically flattened with underscore separation.\n\n## License\n\nMIT License  \n\u00a9 Tomasz S\u0142ugocki\n",
    "bugtrack_url": null,
    "license": "MIT License\n        \n        Copyright (c) 2024 Tomasz S\u0142ugocki\n        \n        Permission is hereby granted, free of charge, to any person obtaining a copy\n        of this software and associated documentation files (the \"Software\"), to deal\n        in the Software without restriction, including without limitation the rights\n        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n        copies of the Software, and to permit persons to whom the Software is\n        furnished to do so, subject to the following conditions:\n        \n        The above copyright notice and this permission notice shall be included in all\n        copies or substantial portions of the Software.\n        \n        THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n        SOFTWARE.",
    "summary": "df2tables: Pandas and Polars DataFrames to Interactive DataTables",
    "version": "0.1.8",
    "project_urls": {
        "Homepage": "https://github.com/ts-kontakt/df2tables",
        "Issues": "https://github.com/ts-kontakt/df2tables/issues"
    },
    "split_keywords": [
        "datatables",
        " html",
        " javascript",
        " pandas",
        " polars"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "79672872556f9bf0da6137ea448d12288f3a9fe0ee807db5fbd987dddb8ed2b9",
                "md5": "68de34a00beba3525846638cb3113e9e",
                "sha256": "6add8fc9f6bf44aede7b6234b35dc42806e4166b28b0ffd5fbaea8132c959ab6"
            },
            "downloads": -1,
            "filename": "df2tables-0.1.8-py2.py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "68de34a00beba3525846638cb3113e9e",
            "packagetype": "bdist_wheel",
            "python_version": "py2.py3",
            "requires_python": null,
            "size": 20658,
            "upload_time": "2025-10-11T09:35:50",
            "upload_time_iso_8601": "2025-10-11T09:35:50.596871Z",
            "url": "https://files.pythonhosted.org/packages/79/67/2872556f9bf0da6137ea448d12288f3a9fe0ee807db5fbd987dddb8ed2b9/df2tables-0.1.8-py2.py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "490cb5c5d9a7170aacf50baf141237033911fe20556f1c2b2be759ee9a5389f1",
                "md5": "076e11569e0d308bd3f4d11bbfb7ac96",
                "sha256": "4982e81b16e96eb196a6ffb9889551e83cd0d722a38a9cc3325859aa98509b02"
            },
            "downloads": -1,
            "filename": "df2tables-0.1.8.tar.gz",
            "has_sig": false,
            "md5_digest": "076e11569e0d308bd3f4d11bbfb7ac96",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 17550,
            "upload_time": "2025-10-11T09:35:52",
            "upload_time_iso_8601": "2025-10-11T09:35:52.095820Z",
            "url": "https://files.pythonhosted.org/packages/49/0c/b5c5d9a7170aacf50baf141237033911fe20556f1c2b2be759ee9a5389f1/df2tables-0.1.8.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-11 09:35:52",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "ts-kontakt",
    "github_project": "df2tables",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "df2tables"
}
        
Elapsed time: 2.01901s