tutorial tablas seleccionar notebook español documentacion datos data con columnas columna cargar agregar python pandas dataframe printing

python - tablas - Bonita impresión de un marco de datos de pandas



seleccionar columnas en pandas (3)

Acabo de encontrar una gran herramienta para esa necesidad, se llama tabulate .

Imprime datos tabulares y funciona con DataFrame .

from tabulate import tabulate import pandas as pd df = pd.DataFrame({''col_two'' : [0.0001, 1e-005 , 1e-006, 1e-007], ''column_3'' : [''ABCD'', ''ABCD'', ''long string'', ''ABCD'']}) print tabulate(df, headers=''keys'', tablefmt=''psql'') +----+-----------+-------------+ | | col_two | column_3 | |----+-----------+-------------| | 0 | 0.0001 | ABCD | | 1 | 1e-05 | ABCD | | 2 | 1e-06 | long string | | 3 | 1e-07 | ABCD | +----+-----------+-------------+

Nota: Hay una solicitud de extracción abierta que permitirá incluir / excluir el índice.

¿Cómo puedo imprimir un marco de datos de pandas como una buena tabla basada en texto, como la siguiente?

+------------+---------+-------------+ | column_one | col_two | column_3 | +------------+---------+-------------+ | 0 | 0.0001 | ABCD | | 1 | 1e-005 | ABCD | | 2 | 1e-006 | long string | | 3 | 1e-007 | ABCD | +------------+---------+-------------+

Actualización: Encontré una solución a esto, publicada como respuesta a continuación.


Puede usar la tabla de prettytable para representar la tabla como texto. El truco consiste en convertir el data_frame en un archivo csv en memoria y leerlo con facilidad. Aquí está el código:

from StringIO import StringIO import prettytable output = StringIO() data_frame.to_csv(output) output.seek(0) pt = prettytable.from_csv(output) print pt


Utilicé la respuesta de Ofer por un tiempo y me pareció excelente en la mayoría de los casos. Lamentablemente, debido a las incoherencias entre to_csv y prettytable ''de las pandas, tuve que usar la tablable de una manera diferente.

Un caso de falla es un marco de datos que contiene comas:

pd.DataFrame({''A'': [1, 2], ''B'': [''a,'', ''b'']})

La mesable plantea un error de la forma:

Error: Could not determine delimiter

La siguiente función maneja este caso:

def format_for_print(df): table = PrettyTable([''''] + list(df.columns)) for row in df.itertuples(): table.add_row(row) return str(table)

Si no le importa el índice, use:

def format_for_print2(df): table = PrettyTable(list(df.columns)) for row in df.itertuples(): table.add_row(row[1:]) return str(table)