Exportar Pandas DataFrame a un archivo PDF usando Python

¿Cuál es una forma eficiente de generar PDF para marcos de datos en Pandas?

Bueno, una forma es usar markdown. Puedes usar df.to_html() . Esto convierte el dataframe en una tabla html. Desde allí, puede colocar el html generado en un archivo de reducción (.md) (consulte http://daringfireball.net/projects/markdown/basics ). Desde allí, hay utilidades para convertir markdown en un pdf ( https://www.npmjs.com/package/markdown-pdf ).

Una herramienta todo en uno para este método es usar el editor de texto Atom ( https://atom.io/ ). Allí puede usar una extensión, busque “markdown to pdf”, que hará la conversión por usted.

Nota: cuando to_html() recientemente tuve que eliminar caracteres ‘\ n’ adicionales por alguna razón. Elegí usar Atom -> Find -> '\n' -> Replace "" .

En general, esto debería hacer el truco!

Así es como lo hago desde la base de datos sqlite usando sqlite3, pandas y pdfkit.

 import pandas as pd import pdfkit as pdf import sqlite3 con=sqlite3.connect("baza.db") df=pd.read_sql_query("select * from dobit", con) df.to_html('/home/linux/izvestaj.html') nazivFajla='/home/linux/pdfPrintOut.pdf' pdf.from_file('/home/linux/izvestaj.html', nazivFajla) 

Esta es una solución con un archivo pdf intermedio.

La mesa está bastante impresa con un mínimo de css.

La conversión de pdf se realiza con weasyprint. Necesitas pip install weasyprint .

 # Create a pandas dataframe with demo data: import pandas as pd demodata_csv = 'https://raw.githubusercontent.com/mwaskom/seaborn-data/master/iris.csv' df = pd.read_csv(demodata_csv) # Pretty print the dataframe as an html table to a file intermediate_html = '/tmp/intermediate.html' to_html_pretty(df,intermediate_html,'Iris Data') # if you do not want pretty printing, just use pandas: # df.to_html(intermediate_html) # Convert the html file to a pdf file using weasyprint import weasyprint out_pdf= '/tmp/demo.pdf' weasyprint.HTML(intermediate_html).write_pdf(out_pdf) # This is the table pretty printer used above: def to_html_pretty(df, filename='/tmp/out.html', title=''): ''' Write an entire dataframe to an HTML file with nice formatting. Thanks to @stackoverflowuser2010 for the pretty printer see https://stackoverflow.com/a/47723330/362951 ''' ht = '' if title != '': ht += '

%s

\n' % title ht += df.to_html(classes='wide', escape=False) with open(filename, 'w') as f: f.write(HTML_TEMPLATE1 + ht + HTML_TEMPLATE2) HTML_TEMPLATE1 = ''' ''' HTML_TEMPLATE2 = ''' '''

Gracias a @ stackoverflowuser2010 por la bonita impresora, vea la respuesta de stackoverflowuser2010 https://stackoverflow.com/a/47723330/362951

No utilicé pdfkit, porque tuve algunos problemas con él en una máquina sin cabeza. Pero weasyprint es genial.