Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
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.
df2img has a limited number of dependencies, namely
pandas
plotly
kaleido
An extensive documentation is available at https://df2img.dev.
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.
You can install the package via pip
.
pip install df2img
Using uv
?
uv add df2img
Let's create a simple pd.DataFrame
with some dummy data:
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"],
)
float_col str_col
row1 1.40 string1
row2 NaN string2
row3 250.00 NaN
row4 24.65 string4
Saving df
into a png-file now takes just two lines of code including some styling out of the box.
plotly
figure.fig = df2img.plot_dataframe(df, fig_size=(500, 140))
df2img.save_dataframe(fig=fig, filename="plot1.png")
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".
fig = df2img.plot_dataframe(
df,
tbl_header=dict(
align="left",
fill_color="blue",
font_color="white",
font_size=14,
),
fig_size=(500, 140),
)
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".
fig = df2img.plot_dataframe(
df,
tbl_cells=dict(
align="right",
fill_color="green",
font_color="yellow",
),
fig_size=(500, 140),
)
You can alternate row colors for better readability by using the row_fill_color
input argument. Using HEX colors is also possible:
fig = df2img.plot_dataframe(
df,
row_fill_color=("#ffffff", "#d7d8d6"),
fig_size=(500, 140),
)
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).
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),
)
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.
fig = df2img.plot_dataframe(
df,
col_width=[3, 2, 1],
fig_size=(500, 140),
)
If you consider to contribute to df2img, please read the Contributing to df2img section in the documentation. This document is supposed to guide you through the whole process.
FAQs
Save a Pandas DataFrame as image
We found that df2img demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.