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.