Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to save the Pandas dataframe/series data as a figure?

It sounds somewhat weird, but I need to save the Pandas console output string to png pics. For example:

>>> df                    sales  net_pft     ROE    ROIC STK_ID RPT_Date                                   600809 20120331  22.1401   4.9253  0.1651  0.6656        20120630  38.1565   7.8684  0.2567  1.0385        20120930  52.5098  12.4338  0.3587  1.2867        20121231  64.7876  13.2731  0.3736  1.2205        20130331  27.9517   7.5182  0.1745  0.3723        20130630  40.6460   9.8572  0.2560  0.4290        20130930  53.0501  11.8605  0.2927  0.4369  

Is there any way like df.output_as_png(filename='df_data.png') to generate a pic file which just display above content inside?

like image 723
bigbug Avatar asked Nov 01 '13 12:11

bigbug


People also ask

How do you save a DataFrame as a picture?

Pass your normal or styled DataFrame to the export function along with a file location to save it as an image. You may also export directly from the DataFrame or styled DataFrame using the dfi. export and export_png methods, respectively. Here, an example of how exporting a DataFrame would look like in a notebook.

How do I convert a Pandas series to a list?

How to use the tolist() method to convert pandas series to list. To convert a pandas Series to a list, simply call the tolist() method on the series which you wish to convert.


2 Answers

Option-1: use matplotlib table functionality, with some additional styling:

import pandas as pd import numpy as np import matplotlib.pyplot as plt  df = pd.DataFrame() df['date'] = ['2016-04-01', '2016-04-02', '2016-04-03'] df['calories'] = [2200, 2100, 1500] df['sleep hours'] = [8, 7.5, 8.2] df['gym'] = [True, False, False]  def render_mpl_table(data, col_width=3.0, row_height=0.625, font_size=14,                      header_color='#40466e', row_colors=['#f1f1f2', 'w'], edge_color='w',                      bbox=[0, 0, 1, 1], header_columns=0,                      ax=None, **kwargs):     if ax is None:         size = (np.array(data.shape[::-1]) + np.array([0, 1])) * np.array([col_width, row_height])         fig, ax = plt.subplots(figsize=size)         ax.axis('off')     mpl_table = ax.table(cellText=data.values, bbox=bbox, colLabels=data.columns, **kwargs)     mpl_table.auto_set_font_size(False)     mpl_table.set_fontsize(font_size)      for k, cell in mpl_table._cells.items():         cell.set_edgecolor(edge_color)         if k[0] == 0 or k[1] < header_columns:             cell.set_text_props(weight='bold', color='w')             cell.set_facecolor(header_color)         else:             cell.set_facecolor(row_colors[k[0]%len(row_colors) ])     return ax.get_figure(), ax  fig,ax = render_mpl_table(df, header_columns=0, col_width=2.0) fig.savefig("table_mpl.png") 

enter image description here

Options-2 Use Plotly + kaleido

import plotly.figure_factory as ff import pandas as pd  df = pd.DataFrame() df['date'] = ['2016-04-01', '2016-04-02', '2016-04-03'] df['calories'] = [2200, 2100, 1500] df['sleep hours'] = [8, 7.5, 8.2] df['gym'] = [True, False, False]  fig =  ff.create_table(df) fig.update_layout(     autosize=False,     width=500,     height=200, ) fig.write_image("table_plotly.png", scale=2) fig.show() 

enter image description here

For the above, the font size can be changed using the font attribute:

fig.update_layout(     autosize=False,     width=500,     height=200,     font={'size':8} ) 
like image 154
volodymyr Avatar answered Sep 23 '22 15:09

volodymyr


You have to use the figure returned by the DataFrame.plot() command:

ax = df.plot() fig = ax.get_figure() fig.savefig('asdf.png') 
like image 39
Inverse Avatar answered Sep 23 '22 15:09

Inverse