Name | df2img JSON |
Version |
0.2.21
JSON |
| download |
home_page | None |
Summary | Save a Pandas DataFrame as image |
upload_time | 2024-10-25 22:12:45 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.9 |
license | MIT License Copyright (c) 2022 Andreas Vester 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 |
pandas
dataframe
image
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# df2img: Save a Pandas DataFrame as image
![img](https://img.shields.io/pypi/v/df2img)
![img](https://img.shields.io/pypi/pyversions/df2img)
![img](https://img.shields.io/github/license/andreas-vester/df2img)
![img](https://img.shields.io/github/issues/andreas-vester/df2img)
![img](https://img.shields.io/github/stars/andreas-vester/df2img)
## What is it all about?
Have you ever tried to save a ``pd.DataFrame`` into an image file? This is not a straightforward process at all. Unfortunately, ``pandas`` itself doesn't provide this functionality out of the box.
**df2img** tries to fill the gap. It is a Python library that greatly simplifies the process of saving a ``pd.DataFrame`` into an image file (e.g. ``png`` or ``jpg``).
It is a wrapper/convenience function in order to create a ``plotly`` Table. That is, one can use ``plotly``'s styling function to format the table.
## Dependencies
**df2img** has a limited number of dependencies, namely
- ``pandas``
- ``plotly``
- ``kaleido``
## Documentation
An extensive documentation is available at https://df2img.dev.
## Important note
The ``kaleido`` dependency is needed to save a ``pd.DataFrame``. Right now there is an
issue when using the latest version of ``kaleido``.
This project requires ``kaleido==v0.2.1`` when you are installing ``df2img`` on a
machine other than Windows.
However, when you're on a Windows machine, you must use ``kaleido==v0.1.0.post1``.
The dependency specification in the ``pyproject.toml`` file takes care of this.
## Quickstart
You can install the package via ``pip``.
```bash
pip install df2img
```
Using ``uv``?
```bash
uv add df2img
```
Let's create a simple ``pd.DataFrame`` with some dummy data:
```python
import pandas as pd
import df2img
df = pd.DataFrame(
data=dict(
float_col=[1.4, float("NaN"), 250, 24.65],
str_col=("string1", "string2", float("NaN"), "string4"),
),
index=["row1", "row2", "row3", "row4"],
)
```
```python
float_col str_col
row1 1.40 string1
row2 NaN string2
row3 250.00 NaN
row4 24.65 string4
```
### Basics
Saving ``df`` into a png-file now takes just two lines of code including some styling out of the box.
* First, we create a ``plotly`` figure.
* Second, we save the figure to disk.
```python
fig = df2img.plot_dataframe(df, fig_size=(500, 140))
df2img.save_dataframe(fig=fig, filename="plot1.png")
```
![img](https://github.com/andreas-vester/df2img/blob/main/docs/img/plot1.png?raw=true)
### Formatting
You can control the settings for the header row via the ``tbl_header`` input argument. This accepts a regular ``dict``. This ``dict`` can comprise various key/value pairs that are also accepted by ``plotly``. All available key/value pairs can be seen at ``plotly``'s website at https://plotly.com/python/reference/table/#table-header.
Let's set the header row in a different color and size. Also, let's set the alignment to "left".
```python
fig = df2img.plot_dataframe(
df,
tbl_header=dict(
align="left",
fill_color="blue",
font_color="white",
font_size=14,
),
fig_size=(500, 140),
)
```
![img](https://github.com/andreas-vester/df2img/blob/main/docs/img/plot2.png?raw=true)
Controlling the table body (cells) is basically the same. Just use the ``tbl_cells`` input argument, which happens to be a ``dict``, too.
See https://plotly.com/python/reference/table/#table-cells for all the possible key/value pairs.
Let's print the table cell values in yellow on a green background and align them "right".
```python
fig = df2img.plot_dataframe(
df,
tbl_cells=dict(
align="right",
fill_color="green",
font_color="yellow",
),
fig_size=(500, 140),
)
```
![img](https://github.com/andreas-vester/df2img/blob/main/docs/img/plot3.png?raw=true)
You can alternate row colors for better readability by using the ``row_fill_color`` input argument. Using HEX colors is also possible:
```python
fig = df2img.plot_dataframe(
df,
row_fill_color=("#ffffff", "#d7d8d6"),
fig_size=(500, 140),
)
```
![img](https://github.com/andreas-vester/df2img/blob/main/docs/img/plot4.png?raw=true)
Setting the title will be controlled via the ``title`` input argument. You can find the relevant key/value pairs here: https://plotly.com/python/reference/layout/#layout-title.
Let's put the title in a different font and size. In addition, we can control the alignment via the ``x`` key/value pair. It sets the x (horizontal) position in normalized coordinates from "0" (left) to "1" (right).
```python
fig = df2img.plot_dataframe(
df,
title=dict(
font_color="darkred",
font_family="Times New Roman",
font_size=24,
text="This is a title starting at the x-value x=0.1",
x=0.1,
xanchor="left",
),
fig_size=(500, 140),
)
```
![img](https://github.com/andreas-vester/df2img/blob/main/docs/img/plot5.png?raw=true)
You can also control relative column width via the ``col_width`` argument. Let's set the first column's width triple the width of the third column and the second column's width double the width of the third column.
```python
fig = df2img.plot_dataframe(
df,
col_width=[3, 2, 1],
fig_size=(500, 140),
)
```
![img](https://github.com/andreas-vester/df2img/blob/main/docs/img/plot6.png?raw=true)
## Contributing to df2img
If you consider to contribute to **df2img**, please read the [Contributing to df2img](./CONTRIBUTING.md) section in the documentation. This document is supposed to guide you through the whole process.
Raw data
{
"_id": null,
"home_page": null,
"name": "df2img",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "pandas, dataframe, image",
"author": null,
"author_email": "Andreas Vester <info@df2img.dev>",
"download_url": "https://files.pythonhosted.org/packages/f7/11/4faf62c5d4a7c64f9b953f7c290b696e6f0459b9c54a1085527eecc1d736/df2img-0.2.21.tar.gz",
"platform": null,
"description": "# df2img: Save a Pandas DataFrame as image\n\n![img](https://img.shields.io/pypi/v/df2img)\n![img](https://img.shields.io/pypi/pyversions/df2img)\n![img](https://img.shields.io/github/license/andreas-vester/df2img)\n![img](https://img.shields.io/github/issues/andreas-vester/df2img)\n![img](https://img.shields.io/github/stars/andreas-vester/df2img)\n\n## What is it all about?\n\nHave you ever tried to save a ``pd.DataFrame`` into an image file? This is not a straightforward process at all. Unfortunately, ``pandas`` itself doesn't provide this functionality out of the box.\n\n**df2img** tries to fill the gap. It is a Python library that greatly simplifies the process of saving a ``pd.DataFrame`` into an image file (e.g. ``png`` or ``jpg``).\n\nIt is a wrapper/convenience function in order to create a ``plotly`` Table. That is, one can use ``plotly``'s styling function to format the table.\n\n\n## Dependencies\n\n**df2img** has a limited number of dependencies, namely\n\n- ``pandas``\n- ``plotly``\n- ``kaleido``\n\n\n## Documentation\n\nAn extensive documentation is available at https://df2img.dev.\n\n## Important note\nThe ``kaleido`` dependency is needed to save a ``pd.DataFrame``. Right now there is an\nissue when using the latest version of ``kaleido``.\nThis project requires ``kaleido==v0.2.1`` when you are installing ``df2img`` on a\nmachine other than Windows.\nHowever, when you're on a Windows machine, you must use ``kaleido==v0.1.0.post1``.\nThe dependency specification in the ``pyproject.toml`` file takes care of this.\n\n## Quickstart\n\nYou can install the package via ``pip``.\n\n```bash\npip install df2img\n```\n\nUsing ``uv``?\n\n```bash\nuv add df2img\n```\n\nLet's create a simple ``pd.DataFrame`` with some dummy data:\n\n```python\nimport pandas as pd\n\nimport df2img\n\ndf = pd.DataFrame(\n data=dict(\n float_col=[1.4, float(\"NaN\"), 250, 24.65],\n str_col=(\"string1\", \"string2\", float(\"NaN\"), \"string4\"),\n ),\n index=[\"row1\", \"row2\", \"row3\", \"row4\"],\n)\n```\n```python\n float_col str_col\nrow1 1.40 string1\nrow2 NaN string2\nrow3 250.00 NaN\nrow4 24.65 string4\n```\n\n### Basics\n\nSaving ``df`` into a png-file now takes just two lines of code including some styling out of the box.\n\n* First, we create a ``plotly`` figure.\n* Second, we save the figure to disk.\n\n```python\nfig = df2img.plot_dataframe(df, fig_size=(500, 140))\n\ndf2img.save_dataframe(fig=fig, filename=\"plot1.png\")\n```\n\n![img](https://github.com/andreas-vester/df2img/blob/main/docs/img/plot1.png?raw=true)\n\n\n### Formatting\n\nYou can control the settings for the header row via the ``tbl_header`` input argument. This accepts a regular ``dict``. This ``dict`` can comprise various key/value pairs that are also accepted by ``plotly``. All available key/value pairs can be seen at ``plotly``'s website at https://plotly.com/python/reference/table/#table-header.\n\nLet's set the header row in a different color and size. Also, let's set the alignment to \"left\".\n\n```python\nfig = df2img.plot_dataframe(\n df,\n tbl_header=dict(\n align=\"left\",\n fill_color=\"blue\",\n font_color=\"white\",\n font_size=14,\n ),\n fig_size=(500, 140),\n)\n```\n![img](https://github.com/andreas-vester/df2img/blob/main/docs/img/plot2.png?raw=true)\n\n\nControlling the table body (cells) is basically the same. Just use the ``tbl_cells`` input argument, which happens to be a ``dict``, too.\nSee https://plotly.com/python/reference/table/#table-cells for all the possible key/value pairs.\n\nLet's print the table cell values in yellow on a green background and align them \"right\".\n\n```python\nfig = df2img.plot_dataframe(\n df,\n tbl_cells=dict(\n align=\"right\",\n fill_color=\"green\",\n font_color=\"yellow\",\n ),\n fig_size=(500, 140),\n)\n```\n\n![img](https://github.com/andreas-vester/df2img/blob/main/docs/img/plot3.png?raw=true)\n\n\nYou can alternate row colors for better readability by using the ``row_fill_color`` input argument. Using HEX colors is also possible:\n\n```python\nfig = df2img.plot_dataframe(\n df,\n row_fill_color=(\"#ffffff\", \"#d7d8d6\"),\n fig_size=(500, 140),\n)\n```\n\n![img](https://github.com/andreas-vester/df2img/blob/main/docs/img/plot4.png?raw=true)\n\n\nSetting the title will be controlled via the ``title`` input argument. You can find the relevant key/value pairs here: https://plotly.com/python/reference/layout/#layout-title.\n\nLet's put the title in a different font and size. In addition, we can control the alignment via the ``x`` key/value pair. It sets the x (horizontal) position in normalized coordinates from \"0\" (left) to \"1\" (right).\n\n```python\n fig = df2img.plot_dataframe(\n df,\n title=dict(\n font_color=\"darkred\",\n font_family=\"Times New Roman\",\n font_size=24,\n text=\"This is a title starting at the x-value x=0.1\",\n x=0.1,\n xanchor=\"left\",\n ),\n fig_size=(500, 140),\n )\n ```\n\n![img](https://github.com/andreas-vester/df2img/blob/main/docs/img/plot5.png?raw=true)\n\n\nYou can also control relative column width via the ``col_width`` argument. Let's set the first column's width triple the width of the third column and the second column's width double the width of the third column.\n\n```python\nfig = df2img.plot_dataframe(\n df,\n col_width=[3, 2, 1],\n fig_size=(500, 140),\n)\n```\n\n![img](https://github.com/andreas-vester/df2img/blob/main/docs/img/plot6.png?raw=true)\n\n## Contributing to df2img\n\nIf you consider to contribute to **df2img**, please read the [Contributing to df2img](./CONTRIBUTING.md) section in the documentation. This document is supposed to guide you through the whole process.\n",
"bugtrack_url": null,
"license": "MIT License Copyright (c) 2022 Andreas Vester 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. ",
"summary": "Save a Pandas DataFrame as image",
"version": "0.2.21",
"project_urls": {
"BugTracker": "https://github.com/andreas-vester/df2img/issues?q=label%3Abug+",
"documentation": "https://df2img.dev",
"homepage": "https://df2img.dev",
"repository": "https://github.com/andreas-vester/df2img"
},
"split_keywords": [
"pandas",
" dataframe",
" image"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "0e23055cc690d39e00206eba97797b50af0bfc262232d84ba1fcad4ca20628da",
"md5": "3437880263513709c55af903c44cd74e",
"sha256": "e5999324adcf618510dc9395260069dcfdec9046bc0e9ccdbe6fc0cb6854ef2c"
},
"downloads": -1,
"filename": "df2img-0.2.21-py3-none-any.whl",
"has_sig": false,
"md5_digest": "3437880263513709c55af903c44cd74e",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 7714,
"upload_time": "2024-10-25T22:12:44",
"upload_time_iso_8601": "2024-10-25T22:12:44.724642Z",
"url": "https://files.pythonhosted.org/packages/0e/23/055cc690d39e00206eba97797b50af0bfc262232d84ba1fcad4ca20628da/df2img-0.2.21-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "f7114faf62c5d4a7c64f9b953f7c290b696e6f0459b9c54a1085527eecc1d736",
"md5": "96d476de7b06816e7e0830688f57dc80",
"sha256": "f911c3e5f3cd72a421c276150479d4498f7ffbeb9414da23cbc36732fa7dbe30"
},
"downloads": -1,
"filename": "df2img-0.2.21.tar.gz",
"has_sig": false,
"md5_digest": "96d476de7b06816e7e0830688f57dc80",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 10249,
"upload_time": "2024-10-25T22:12:45",
"upload_time_iso_8601": "2024-10-25T22:12:45.879912Z",
"url": "https://files.pythonhosted.org/packages/f7/11/4faf62c5d4a7c64f9b953f7c290b696e6f0459b9c54a1085527eecc1d736/df2img-0.2.21.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-10-25 22:12:45",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "andreas-vester",
"github_project": "df2img",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "df2img"
}