write without to_csv index guardar data python matplotlib pandas

python - without - ¿Cómo guardar los datos del cuadro de datos/series de Pandas como una figura?



pandas to_csv separator (4)

Aquí hay una solución algo hackish pero hace el trabajo bien.

import numpy as np import pandas as pd from matplotlib.backends.backend_pdf import PdfPages import matplotlib.pyplot as plt from PySide.QtGui import QImage from PySide.QtGui import QPainter from PySide.QtCore import QSize from PySide.QtWebKit import QWebPage arrays = [np.hstack([ [''one'']*3, [''two'']*3]), [''Dog'', ''Bird'', ''Cat'']*2] columns = pd.MultiIndex.from_arrays(arrays, names=[''foo'', ''bar'']) df =pd.DataFrame(np.zeros((3,6)),columns=columns,index=pd.date_range(''20000103'',periods=3)) h = "<!DOCTYPE html> <html> <body> <p> " + df.to_html() + " </p> </body> </html>"; page = QWebPage() page.setViewportSize(QSize(5000,5000)) frame = page.mainFrame() frame.setHtml(h, "text/html") img = QImage(1000,700, QImage.Format(5)) painter = QPainter(img) frame.render(painter) painter.end() a = img.save("html.png")

Suena un tanto extraño, pero necesito guardar la cadena de salida de la consola Pandas en png pics. Por ejemplo:

>>> 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

¿Hay alguna forma como df.output_as_png(filename=''df_data.png'') para generar un archivo de imagen que solo muestre el contenido anterior?


Me interesaba guardar mi dataframe como una tabla para un apéndice para un informe. Encontré esta es la solución más simple:

import pandas as pd from matplotlib.backends.backend_pdf import PdfPages import matplotlib.pyplot as plt # Assuming that you have a dataframe, df pp = PdfPages(''Appendix_A.pdf'') total_rows, total_cols = df.shape; #There were 3 columns in my df rows_per_page = 40; # Assign a page cut off length rows_printed = 0 page_number = 1; while (total_rows >0): #put the table on a correctly sized figure fig=plt.figure(figsize=(8.5, 11)) plt.gca().axis(''off'') matplotlib_tab = pd.tools.plotting.table(plt.gca(),df.iloc[rows_printed:rows_printed+rows_per_page], loc=''upper center'', colWidths=[0.2, 0.2, 0.2]) # Give you cells some styling table_props=matplotlib_tab.properties() table_cells=table_props[''child_artists''] # I have no clue why child_artists works for cell in table_cells: cell.set_height(0.024) cell.set_fontsize(12) # Add a header and footer with page number fig.text(4.25/8.5, 10.5/11., "Appendix A", ha=''center'', fontsize=12) fig.text(4.25/8.5, 0.5/11., ''A''+str(page_number), ha=''center'', fontsize=12) pp.savefig() plt.close() #Update variables rows_printed += rows_per_page; total_rows -= rows_per_page; page_number+=1; pp.close()


Utilizaría la funcionalidad de la tabla matplotlib, con un poco de estilo adicional:

import pandas as pd import numpy as np import matplotlib.pyplot as plt import six df = pd.DataFrame() df[''date''] = [''2016-04-01'', ''2016-04-02'', ''2016-04-03''] df[''calories''] = [2200, 2100, 1500] df[''sleep hours''] = [2200, 2100, 1500] 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 six.iteritems(mpl_table._cells): 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 render_mpl_table(df, header_columns=0, col_width=2.0)


DataFrame.plot() usar la figura devuelta por el DataFrame.plot() :

ax = df.plot() fig = ax.get_figure() fig.savefig(''asdf.png'')