# FrameDisplay: Beautiful DataFrame Display
<div align="center">
[](https://pypi.org/project/framedisplay/)
[](https://pypi.org/project/framedisplay/)

[](https://codecov.io/gh/nsarang/framedisplay)
<br/>
<img alt="DataFrame" src="https://raw.githubusercontent.com/nsarang/framedisplay/refs/heads/main/assets/dataframe.png" width="500px" style="max-width: 100%;">
<br/>
<br/>
</div>
FrameDisplay is a lightweight python package that enhances the display of Pandas DataFrames in Jupyter Notebooks. It provides interactive and visually appealing HTML tables with resizable columns, sticky headers and index, and type and null value handling.
Live demo: [CodePen](https://codepen.io/B-L-A-Z-E/pen/empJPKV)
## Installation
```bash
pip install framedisplay
```
## Features
- **Resizable Columns**: Interactive column resizing
- **No Size Limit**: Display DataFrames of any size (but be aware of performance)
- **Column type icons**: Icons indicating column types (e.g., numeric, string)
- **Sticky Headers**: Headers stay visible during scrolling
- **Sticky Index**: Index column remains visible while scrolling
- **Null Handling**: Null values are elegantly styled
**To Do:**
- Virtual scrolling for large DataFrames
- Sortable columns
## Usage
```python
import pandas as pd
import numpy as np
import framedisplay as fd
df = pd.DataFrame({
'Name': ['Alice', 'Bob', np.nan],
'Age': [25, np.nan, 35],
'Score': [95.5, 87.2, np.nan]
})
fd.frame_display(df)
```
You can also configure the JS script in Jupyter Notebooks before displaying the DataFrame:
```python
from IPython.display import display, HTML
display(HTML("""
<script>
window.FrameDisplayConfig = {
minColumnWidth: 30,
resizerWidth: 8,
resizerHoverColor: 'rgba(0,0,0,0.1)',
showHoverEffect: true,
autoInit: true,
allowReInit: true
};
</script>
"""))
```
## License
MIT
Raw data
{
"_id": null,
"home_page": "https://github.com/nsarang/framedisplay",
"name": "framedisplay",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "debugging, post-mortem, traceback, exception, development",
"author": "Nima Sarang",
"author_email": "contact@nimasarang.com",
"download_url": "https://files.pythonhosted.org/packages/24/04/de741982a7cd86c1850e92abe6901476183de55ab0982109b64fae9845a7/framedisplay-1.1.0.tar.gz",
"platform": null,
"description": "# FrameDisplay: Beautiful DataFrame Display\n\n<div align=\"center\">\n\n[](https://pypi.org/project/framedisplay/)\n[](https://pypi.org/project/framedisplay/)\n\n[](https://codecov.io/gh/nsarang/framedisplay)\n\n<br/>\n<img alt=\"DataFrame\" src=\"https://raw.githubusercontent.com/nsarang/framedisplay/refs/heads/main/assets/dataframe.png\" width=\"500px\" style=\"max-width: 100%;\">\n\n<br/>\n<br/>\n</div>\n\nFrameDisplay is a lightweight python package that enhances the display of Pandas DataFrames in Jupyter Notebooks. It provides interactive and visually appealing HTML tables with resizable columns, sticky headers and index, and type and null value handling.\n\nLive demo: [CodePen](https://codepen.io/B-L-A-Z-E/pen/empJPKV)\n\n## Installation\n\n```bash\npip install framedisplay\n```\n\n## Features\n\n- **Resizable Columns**: Interactive column resizing\n- **No Size Limit**: Display DataFrames of any size (but be aware of performance)\n- **Column type icons**: Icons indicating column types (e.g., numeric, string)\n- **Sticky Headers**: Headers stay visible during scrolling\n- **Sticky Index**: Index column remains visible while scrolling\n- **Null Handling**: Null values are elegantly styled\n\n**To Do:**\n- Virtual scrolling for large DataFrames\n- Sortable columns\n\n## Usage\n\n```python\nimport pandas as pd\nimport numpy as np\nimport framedisplay as fd\n\ndf = pd.DataFrame({\n 'Name': ['Alice', 'Bob', np.nan],\n 'Age': [25, np.nan, 35],\n 'Score': [95.5, 87.2, np.nan]\n})\n\nfd.frame_display(df)\n```\n\nYou can also configure the JS script in Jupyter Notebooks before displaying the DataFrame:\n\n```python\nfrom IPython.display import display, HTML\n\ndisplay(HTML(\"\"\"\n<script>\nwindow.FrameDisplayConfig = {\n minColumnWidth: 30,\n resizerWidth: 8,\n resizerHoverColor: 'rgba(0,0,0,0.1)',\n showHoverEffect: true,\n autoInit: true,\n allowReInit: true\n};\n</script>\n\"\"\"))\n```\n\n## License\n\nMIT\n",
"bugtrack_url": null,
"license": null,
"summary": "Post-mortem debugging tools for Python",
"version": "1.1.0",
"project_urls": {
"Documentation": "https://github.com/nsarang/framedisplay#readme",
"Homepage": "https://github.com/nsarang/framedisplay",
"Issues": "https://github.com/nsarang/framedisplay/issues"
},
"split_keywords": [
"debugging",
" post-mortem",
" traceback",
" exception",
" development"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "98406f19ea335f1bfc5d1be1c33e66043e6d2a043f49b96c64e243865ac5a2bc",
"md5": "9b6b26bbbb7830b909a4c06d01a0c3f7",
"sha256": "5c4bf6db0ee11e7b4093edfcb3acd65b9d3a334915c21583c3873837a4c4a1be"
},
"downloads": -1,
"filename": "framedisplay-1.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "9b6b26bbbb7830b909a4c06d01a0c3f7",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 4999,
"upload_time": "2025-07-20T20:02:11",
"upload_time_iso_8601": "2025-07-20T20:02:11.297502Z",
"url": "https://files.pythonhosted.org/packages/98/40/6f19ea335f1bfc5d1be1c33e66043e6d2a043f49b96c64e243865ac5a2bc/framedisplay-1.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2404de741982a7cd86c1850e92abe6901476183de55ab0982109b64fae9845a7",
"md5": "e6ba0c06b2e23caca8dcb43e0eca0d4d",
"sha256": "57fcef7891505b41d2864ec2a866a9d4884471a142129f58cbf416c4cc4fcacc"
},
"downloads": -1,
"filename": "framedisplay-1.1.0.tar.gz",
"has_sig": false,
"md5_digest": "e6ba0c06b2e23caca8dcb43e0eca0d4d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 7584,
"upload_time": "2025-07-20T20:02:12",
"upload_time_iso_8601": "2025-07-20T20:02:12.623131Z",
"url": "https://files.pythonhosted.org/packages/24/04/de741982a7cd86c1850e92abe6901476183de55ab0982109b64fae9845a7/framedisplay-1.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-20 20:02:12",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "nsarang",
"github_project": "framedisplay",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "framedisplay"
}