¿Cómo imprimir un df en Terminal sin perder formato?

¿Cómo puedo imprimir un df en la Terminal sin perder el formato?

Digamos que tengo un df como este:

In: df Out: TFs No Esenciales Genes regulados Genes Regulados Positivamente Genes Regulados Negativamente No Tentativo de genes a silenciar No Real de genes a silenciar No Tentativo de genes a inducir 146 YdeO 20 18 2 2 2 0 

Pero cuando uso print para mostrarlo en el shell, pierde su formato

 In: print (df) Out: TFs No Esenciales Genes regulados Genes Regulados Positivamente \ 146 YdeO 20 18 Genes Regulados Negativamente No Tentativo de genes a silenciar \ 146 2 2 No Real de genes a silenciar No Tentativo de genes a inducir \ 146 2 0 No Real de genes a inducir Balance de genes Balance real de genes 146 0 2 2 

¿Cómo puedo usar imprimir, pero mantener el formato?

Mi salida deseada es:

 In: print (df) Out: TFs No Esenciales Genes regulados Genes Regulados Positivamente Genes Regulados Negativamente No Tentativo de genes a silenciar No Real de genes a silenciar No Tentativo de genes a inducir 146 YdeO 20 18 2 2 2 0 

DOCUMENTACIÓN

Hay 2 cosas en ese control para el formato que puede ver.

  1. Controlando el ancho de caracteres que la pantalla puede manejar.

    • Esto se maneja con la opción pandas display.width y se puede ver con print pd.get_option('display.width') . El valor predeterminado es 80 .
  2. El segundo control es el número de columnas en el dataframe para mostrar.

    • Esto se maneja con la opción pandas display.max_columns y se puede ver con print pd.get_option('display.max_columns') . El valor predeterminado es 20 .

display.width

Vamos a explorar lo que esto hace con un dataframe de muestra

 import pandas as pd df = pd.DataFrame([range(40)], columns=['ABCDE%d' % i for i in range(40)]) print df # this is with default 'display.width' of 80 ABCDE0 ABCDE1 ABCDE2 ABCDE3 ABCDE4 ABCDE5 ABCDE6 ABCDE7 ABCDE8 \ 0 0 1 2 3 4 5 6 7 8 ABCDE9 ... ABCDE30 ABCDE31 ABCDE32 ABCDE33 ABCDE34 ABCDE35 \ 0 9 ... 30 31 32 33 34 35 ABCDE36 ABCDE37 ABCDE38 ABCDE39 0 36 37 38 39 [1 rows x 40 columns] 

pd.set_option('display.width', 40)

 print df ABCDE0 ABCDE1 ABCDE2 ABCDE3 \ 0 0 1 2 3 ABCDE4 ABCDE5 ABCDE6 ABCDE7 \ 0 4 5 6 7 ABCDE8 ABCDE9 ... ABCDE30 \ 0 8 9 ... 30 ABCDE31 ABCDE32 ABCDE33 ABCDE34 \ 0 31 32 33 34 ABCDE35 ABCDE36 ABCDE37 ABCDE38 \ 0 35 36 37 38 ABCDE39 0 39 [1 rows x 40 columns] 

pd.set_option('display.width', 120)

Esto debería desplazarse hacia la derecha.

 print df ABCDE0 ABCDE1 ABCDE2 ABCDE3 ABCDE4 ABCDE5 ABCDE6 ABCDE7 ABCDE8 ABCDE9 ... ABCDE30 ABCDE31 ABCDE32 \ 0 0 1 2 3 4 5 6 7 8 9 ... 30 31 32 ABCDE33 ABCDE34 ABCDE35 ABCDE36 ABCDE37 ABCDE38 ABCDE39 0 33 34 35 36 37 38 39 [1 rows x 40 columns] 

display.max_columns

Pongamos 'display.width' nuevo a 80 con pd.set_option('display.width,80)

Ahora exploremos diferentes valores de 'display.max_columns'

 print df # default 20 ABCDE0 ABCDE1 ABCDE2 ABCDE3 ABCDE4 ABCDE5 ABCDE6 ABCDE7 ABCDE8 \ 0 0 1 2 3 4 5 6 7 8 ABCDE9 ... ABCDE30 ABCDE31 ABCDE32 ABCDE33 ABCDE34 ABCDE35 \ 0 9 ... 30 31 32 33 34 35 ABCDE36 ABCDE37 ABCDE38 ABCDE39 0 36 37 38 39 [1 rows x 40 columns] 

Observe las elipsis en el medio. Hay 40 columnas en este dataframe, para llegar a un recuento de 20 columnas máx., Los pandas tomaron las primeras 10 columnas 0:9 y las últimas 10 columnas 30:39 y pusieron una elipsis en el centro.

pd.set_option('display.max_columns', 30)

 print df ABCDE0 ABCDE1 ABCDE2 ABCDE3 ABCDE4 ABCDE5 ABCDE6 ABCDE7 ABCDE8 \ 0 0 1 2 3 4 5 6 7 8 ABCDE9 ABCDE10 ABCDE11 ABCDE12 ABCDE13 ABCDE14 ... ABCDE25 \ 0 9 10 11 12 13 14 ... 25 ABCDE26 ABCDE27 ABCDE28 ABCDE29 ABCDE30 ABCDE31 ABCDE32 ABCDE33 \ 0 26 27 28 29 30 31 32 33 ABCDE34 ABCDE35 ABCDE36 ABCDE37 ABCDE38 ABCDE39 0 34 35 36 37 38 39 [1 rows x 40 columns] 

Note que el ancho de los caracteres se mantuvo igual pero tengo más columnas. Los pandas tomaron las primeras 15 columnas 0:14 y las últimas 15 columnas 26:39 .

Para que se muestren todas las columnas, debe configurar esta opción para que sea al menos tan grande como el número de columnas que desea mostrar.

pd.set_option('display.max_columns', 40)

 print df ABCDE0 ABCDE1 ABCDE2 ABCDE3 ABCDE4 ABCDE5 ABCDE6 ABCDE7 ABCDE8 \ 0 0 1 2 3 4 5 6 7 8 ABCDE9 ABCDE10 ABCDE11 ABCDE12 ABCDE13 ABCDE14 ABCDE15 ABCDE16 \ 0 9 10 11 12 13 14 15 16 ABCDE17 ABCDE18 ABCDE19 ABCDE20 ABCDE21 ABCDE22 ABCDE23 ABCDE24 \ 0 17 18 19 20 21 22 23 24 ABCDE25 ABCDE26 ABCDE27 ABCDE28 ABCDE29 ABCDE30 ABCDE31 ABCDE32 \ 0 25 26 27 28 29 30 31 32 ABCDE33 ABCDE34 ABCDE35 ABCDE36 ABCDE37 ABCDE38 ABCDE39 0 33 34 35 36 37 38 39 

No hay puntos suspensivos, se muestran todas las columnas.

Combinando ambas opciones juntas

Bastante simple en este punto. pd.set_option('display.width', 1000) usa 1000 para permitir algo largo. pd.set_option('display.max_columns', 1000) también permite marcos de datos amplios.

 print df ABCDE0 ABCDE1 ABCDE2 ABCDE3 ABCDE4 ABCDE5 ABCDE6 ABCDE7 ABCDE8 ABCDE9 ABCDE10 ABCDE11 ABCDE12 ABCDE13 ABCDE14 ABCDE15 ABCDE16 ABCDE17 ABCDE18 ABCDE19 ABCDE20 ABCDE21 ABCDE22 ABCDE23 ABCDE24 ABCDE25 ABCDE26 ABCDE27 ABCDE28 ABCDE29 ABCDE30 ABCDE31 ABCDE32 ABCDE33 ABCDE34 ABCDE35 ABCDE36 ABCDE37 ABCDE38 ABCDE39 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 

Usando tus datos

 print df TFs No Esenciales Genes regulados Genes.1 Regulados Positivamente Genes.2 Regulados.1 Negativamente No.1 Tentativo de genes a silenciar No.2 Real de.1 genes.1 a.1 silenciar.1 No.3 Tentativo.1 de.2 genes.2 a.2 inducir 0 146 YdeO 20 18 2 2 2 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 

CUEVA GRANDE

Cuando ejecutas esto, es posible que no veas esta magia de desplazamiento que haces aquí. Esto se debe a que su terminal probablemente no se desplaza hacia la derecha. A continuación se muestra una captura de pantalla de jupyter-notebook. No se ve bien porque el texto está siendo envuelto. Sin embargo, no hay nuevas líneas en la cadena donde se ajusta, como lo demuestra el hecho de que cuando lo copié y pegué en el desbordamiento de la stack, se muestra de forma adecuada.

introduzca la descripción de la imagen aquí Al air libre

Hay opciones de visualización que se pueden usar para controlar cómo se DataFrame el DataFrame . Probablemente quieras:

 In [28]: pd.set_option('expand_frame_repr', False) In [29]: pd.set_option('display.max_columns', 999)