Pandas: Mostrar todos los elementos de un DataFrame

Publicado el 26 agosto 2021 por Daniel Rodríguez @analyticslane

En Pandas, al sacar por pantalla los elementos de grandes conjuntos de datos por defecto solamente se mostrará una parte de estos. Lo que generalmente es una buena solución. Al trabajar de este modo, es fácil hacerse una idea de la forma de los datos sin llenar pantallas y pantallas con información que no es relevante. Aunque, cuando exista la necesidad de ver todos los elementos de un DataFrame es posible configurar el comportamiento de Pandas para que se muestre todo el número de filas y columnas que necesitemos.

Pandas con grandes conjuntos de datos

En primer lugar, podemos ver el comportamiento de Pandas a la hora de imprimir por pantalla grandes conjuntos de datos. Para esto se puede importar el conjunto de datos brain_networks que se encuentra en la librería Seabornm, un conjunto de datos que cuenta con 63 columnas y 923 filas, y mostrarlo por pantalla con la función print().

import pandas as pd
from seaborn import load_dataset

brain = load_dataset("brain_networks")

print('Columnas : ', len(brain.columns))
print('Filas    : ', len(brain.index))

print(brain)
Columnas :  63
Filas    :  923
    network                    1                  1.1                   2  \
0      node                    1                    1                   1   
1      hemi                   lh                   rh                  lh   
2       NaN                  NaN                  NaN                 NaN   
3         0    56.05574417114258    92.03103637695312   3.391575574874878   
4         1     55.5472526550293     43.6900749206543  -65.49598693847656   
..      ...                  ...                  ...                 ...   
918     915  -7.4295125007629395    -4.81321907043457  -3.670536518096924   
919     916   -33.55413818359375   -38.60562133789063  -25.66480255126953   
920     917   -78.53956604003906   -74.19718933105469  -54.04159545898438   
921     918  -103.23582458496094    -98.7442855834961  -40.10954284667969   
922     919   -36.28886795043945  -10.762069702148438  -30.35626220703125   

                     2.1                    3                  3.1  \
0                      1                    1                    1   
1                     rh                   lh                   rh   
2                    NaN                  NaN                  NaN   
3      38.65968322753906   26.203819274902344   -49.71556854248047   
4    -13.974522590637207   -28.27496337890625   -39.05012893676758   
..                   ...                  ...                  ...   
918   1.4422610998153689    -19.6804313659668  -29.109355926513672   
919  -30.252351760864254   5.5627851486206055   20.182186126708984   
920   -39.97029113769531  -14.277058601379395  -30.606460571289066   
921   -44.90773391723633   12.109148025512695   1.6213401556015017   
922   -23.31950378417969   14.252187728881836   -27.55986022949219   

                       4                  4.1                     5  ...  \
0                      1                    1                     1  ...   
1                     lh                   rh                    lh  ...   
2                    NaN                  NaN                   NaN  ...   
3       47.4610366821289   26.746612548828125   -35.898860931396484  ...   
4    -1.2106596231460571  -19.012897491455078    19.568010330200195  ...   
..                   ...                  ...                   ...  ...   
918  -3.3765623569488525      -8.764892578125  0.017911728471517563  ...   
919    17.91124725341797    24.65358161926269    -32.93561172485352  ...   
920    60.62852096557617    62.02702331542969    -32.80055618286133  ...   
921   33.765560150146484    55.35607147216797   -14.330512046813965  ...   
922   17.279512405395508  -19.060152053833008     26.55877685546875  ...   

                   16.5                16.6                 16.7  \
0                     3                   4                    4   
1                    rh                  lh                   rh   
2                   NaN                 NaN                  NaN   
3    0.6079040169715881  -70.27054595947266    77.36577606201172   
4     57.49507141113281  -76.39321899414062   127.26136016845705   
..                  ...                 ...                  ...   
918   58.28579330444336   68.55741119384766    22.83304786682129   
919   59.86481857299805   23.00457763671875   7.6574625968933105   
920   68.76786804199219   49.66401672363281    64.55149841308594   
921   103.1552505493164  106.45484924316406     9.04682731628418   
922   102.0863037109375   80.05113983154297  -2.6426103115081787   

                      17                17.1                 17.2  \
0                      1                   1                    2   
1                     lh                  rh                   lh   
2                    NaN                 NaN                  NaN   
3     -21.73455047607422  1.0282527208328247   7.7917842864990225   
4    -13.035799026489258    46.3818244934082  -15.752449989318848   
..                   ...                 ...                  ...   
918    76.17948913574219    51.9346694946289   -6.614512920379639   
919    50.96239852905274  13.696922302246096    63.50361633300781   
920    43.80074691772461   8.144479751586914    47.28145980834961   
921    46.67441940307617   40.95479583740234   0.8771800398826599   
922  -12.229619979858398  -6.596726417541504   17.665163040161133   

                   17.3                 17.4                17.5  \
0                     2                    3                   3   
1                    rh                   lh                  rh   
2                   NaN                  NaN                 NaN   
3     68.90372467041016  -10.520872116088867  120.49046325683594   
4     31.00033187866211  -39.607521057128906   24.76401138305664   
..                  ...                  ...                 ...   
918  -6.690762042999268   22.893030166625977   48.27437973022461   
919   57.40117645263672    24.97454833984375   51.97215270996094   
920   70.49964904785156    66.99440002441406   81.53924560546875   
921   37.57715225219727   20.517745971679688   3.124434232711792   
922  16.153173446655273    8.300398826599121  33.687530517578125   

                    17.6  
0                      4  
1                     lh  
2                    NaN  
3    -39.686431884765625  
4      -36.7710075378418  
..                   ...  
918    76.22845458984375  
919    64.53878784179689  
920    64.96977233886719  
921    56.71838760375977  
922   17.960655212402344  

[923 rows x 63 columns]

En este caso se puede ver que solamente se muestra una cantidad limitada de filas y columnas en varios grupos. Esto es debido a la configuración por defecto que emplea Pandas para mostrar los elementos de un DataFrame, configuración que se puede cambiar.

Configuración por defecto de Pandas para la impresión de DataFrame

Existen cuatro parámetros en los que se puede configurar la forma en la que Pandas mostrará el contenido de los DataFrame. Estos parámetros son:

  • max_rows: número máximo de filas que se mostrará por pantalla, valor por defecto es 10.
  • max_columns: número máximo de columnas que se mostrará por pantalla, valor por defecto 20.
  • display.width: máximo ancho en caracteres de las columnas, en el caso de que se supere este valor se mostrará un salto de línea como en el ejemplo anterior, su valor por defecto es de 80.
  • display.max_colwidth: máximo ancho en caracteres de cada una de las columnas, en el caso de que el contenido de alguna supere este valor se truncará el contenido a mostrar, su valor por defecto es de 50.

Es posible consultar y cambiar el valor de estas propiedades empleando respectivamente las funciones pd.get_option() y pd.set_option().

Limitar el número de filas y columnas a mostrar

En primer lugar, se puede ver como modificar el número máximo de filas y columnas, algo que es bastante útil para el conjunto de datos de ejemplo con el que estamos trabajando. Por ejemplo, limitando el número de columnas y filas a seis.

pd.set_option('max_columns', 6)
pd.set_option('max_rows', 6)

print(brain)
    network                    1                  1.1  ...  \
0      node                    1                    1  ...   
1      hemi                   lh                   rh  ...   
2       NaN                  NaN                  NaN  ...   
..      ...                  ...                  ...  ...   
920     917   -78.53956604003906   -74.19718933105469  ...   
921     918  -103.23582458496094    -98.7442855834961  ...   
922     919   -36.28886795043945  -10.762069702148438  ...   

                   17.4                17.5                17.6  
0                     3                   3                   4  
1                    lh                  rh                  lh  
2                   NaN                 NaN                 NaN  
..                  ...                 ...                 ...  
920   66.99440002441406   81.53924560546875   64.96977233886719  
921  20.517745971679688   3.124434232711792   56.71838760375977  
922   8.300398826599121  33.687530517578125  17.960655212402344  

[923 rows x 63 columns]

Cambiar el ancho de las columnas

Con los cambios introducidos en la sección anterior los datos se muestran en dos filas tras un salto de línea. En el caso de tener una pantalla con más de 80 caracteres se puede aumentar el ancho para poder ver el contenido sin estos saltos. Para lo que solamente se tiene que cambiar el valor de la propiedad display.width a un valor mayor como puede ser 120.

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

print(brain)
    network                    1                  1.1  ...                17.4                17.5                17.6
0      node                    1                    1  ...                   3                   3                   4
1      hemi                   lh                   rh  ...                  lh                  rh                  lh
2       NaN                  NaN                  NaN  ...                 NaN                 NaN                 NaN
..      ...                  ...                  ...  ...                 ...                 ...                 ...
920     917   -78.53956604003906   -74.19718933105469  ...   66.99440002441406   81.53924560546875   64.96977233886719
921     918  -103.23582458496094    -98.7442855834961  ...  20.517745971679688   3.124434232711792   56.71838760375977
922     919   -36.28886795043945  -10.762069702148438  ...   8.300398826599121  33.687530517578125  17.960655212402344

[923 rows x 63 columns]

Otra opción para compactar la información es cambiar el ancho de cada una de las columnas, limitando este valor a 10 se podría tener el contenido de las seis columnas en menos de 80 caracteres.

pd.set_option('display.width', 80)
pd.set_option('display.max_colwidth', 10)

print(brain)
    network          1        1.1  ...       17.4       17.5       17.6
0      node          1          1  ...          3          3          4
1      hemi         lh         rh  ...         lh         rh         lh
2       NaN        NaN        NaN  ...        NaN        NaN        NaN
..      ...        ...        ...  ...        ...        ...        ...
920     917  -78.53...  -74.19...  ...  66.994...  81.539...  64.969...
921     918  -103.2...  -98.74...  ...  20.517...  3.1244...  56.718...
922     919  -36.28...  -10.76...  ...  8.3003...  33.687...  17.960...

[923 rows x 63 columns]

Observando que debido a la limitación no se muestra todo el contenido de las celdas, solamente los primeros valores.

Mostrar todos los elementos de un DataFrame

En el caso de que necesitemos ver todos los elementos de un DataFrame simplemente se tendría que fijar el valor de todos los parámetros vistos a None.

pd.set_option('max_rows', None)
pd.set_option('max_columns', None)
pd.set_option('display.width', None)
pd.set_option('display.max_colwidth', None)

print(brain)

En este caso no muestra el contenido del debido al tamaño del mismos.

Conclusiones

En esta entrada se ha visto cómo emplear cuatro propiedades para manejar la parte de un conjunto de datos que se mostrará por pantalla en Pandas. Algo con lo que se puede gestionar la forma en la que se muestran los datos. Pudiendo incluso llegar a mostrar todos los elementos de un DataFrame.