• Saltar al contenido principal
  • Skip to secondary menu
  • Saltar a la barra lateral principal
  • Saltar al pie de página
  • Inicio
  • Secciones
    • Ciencia de datos
    • Criptografía
    • Herramientas
    • Machine Learning
    • Noticias
    • Opinión
    • Productividad
    • Programación
      • JavaScript
      • Julia
      • Matlab
      • Python
      • R
  • Programación
    • JavaScript
    • Julia
    • Matlab
    • Python
    • R
  • Noticias
  • Boletín
  • Contacto
  • Tienda
    • Libros
    • Equipamiento de oficina
    • Equipamiento en movilidad
    • Tiendas afiliadas
      • AliExpress
      • Amazon
      • Banggood
      • GeekBuying
      • Lenovo

Analytics Lane

Ciencia e ingeniería de datos aplicada

  • Ciencia de datos
  • Machine Learning
  • Python
  • Pandas
  • NumPy
  • Matlab
  • Julia
  • JavaScript
  • Excel

Diferentes formas de ordenar dataframes en pandas

abril 29, 2019 Por Daniel Rodríguez 2 comentarios
Tiempo de lectura: 5 minutos

Una vez importado un conjunto de datos en pandas puede ser interesante ordenar el contenido de estos. Lo más habitual es ordenarlo en base a los valores de una o varias columnas. Para ordenar dataframes en pandas se pueden utilizar los métodos nativos de estos objetos. Lo que permite hacer esta tarea de un forma sencilla y eficiente.

En esta entrada se va a utilizar el conjunto de datos planetas que se puede encontrar dentro de los conjuntos de datos de seaborn. La importación de estos datos se puede realizar con el siguiente código.

from seaborn import load_dataset
planets = load_dataset("planets")
planets.head()

Siendo los cinco primeros registros de este conjunto de datos.

            method  number  orbital_period   mass  distance  year
0  Radial Velocity       1         269.300   7.10     77.40  2006
1  Radial Velocity       1         874.774   2.21     56.95  2008
2  Radial Velocity       1         763.000   2.60     19.84  2011
3  Radial Velocity       1         326.030  19.40    110.62  2007
4  Radial Velocity       1         516.220  10.50    119.47  2009

Ordenar en base al valor de una columna

La primera tarea siempre es ordenar los conjuntos de datos en base a los valores de una columna. Por ejemplo, se puede ordenar los planetas en base al año de descubrimiento. Lo que se puede conseguir con el método sort() al que se le ha de indicar el nombre de la columna por la que ordenar. Esto se puede ver en el siguiente ejemplo.

by_year = planets.sort_values('year')
by_year.head()
              method  number  orbital_period    mass  distance  year
441  Radial Velocity       1       83.888000  11.680     40.57  1989
942    Pulsar Timing       3       66.541900     NaN       NaN  1992
941    Pulsar Timing       3       25.262000     NaN       NaN  1992
943    Pulsar Timing       3       98.211400     NaN       NaN  1994
16   Radial Velocity       1        4.230785   0.472     15.36  1995

Lo primero que se puede observar es el hecho de que los registros se ordenan de forma ascendente. Por lo que los planetas descubiertos recientemente aparecerán al final del nuevo conjunto de datos.

Publicidad


by_year.tail()
      method  number  orbital_period  mass  distance  year
846  Transit       2        15.96540   NaN       NaN  2014
847  Transit       2       179.61200   NaN       NaN  2014
849  Transit       4         6.16486   NaN       NaN  2014
851  Transit       4        23.98020   NaN       NaN  2014
840  Transit       3        35.33310   NaN       NaN  2014

Ordenar en base al valor de una columna en orden descendente

En el ejemplo anterior, si se quiere tener al principio del conjunto de datos ordenado es necesario cambiar el método de ordenación. Para ello existe la propiedad ascending que indica si se ordena de forma ascendente. El valor por defecto de esta propiedad es verdadero, por lo que solamente es necesario indicar el valor cuando se desea ordenar en orden descendente. Así para ordenar los planetas por año en orden descendente se puede es necesario escribir.

by_year = planets.sort_values('year',ascending=False)
by_year.head()

En donde se observa el resultado deseado.

              method  number  orbital_period  mass  distance  year
852          Transit       4        43.84450   NaN       NaN  2014
890          Transit       2         2.42629   NaN       NaN  2014
440  Radial Velocity       1      3827.00000  0.48     20.48  2014
895          Transit       1        68.95840   NaN       NaN  2014
894          Transit       1         2.46502   NaN       NaN  2014

Tener en cuenta los nulos a la hora de ordenar

Si en la columna del conjunto de datos que se esté ordenando existe valores nulos, por defecto estos serán puestos al final. La columna periodo orbital contiene valores nulos, al ordenar por ésta se obtiene.

by_period = planets.sort_values('orbital_period')
by_period.head()
                            method  number  orbital_period  mass  distance  year 
945                  Pulsar Timing       1        0.090706   NaN    1200.0  2011 
787  Orbital Brightness Modulation       2        0.240104   NaN    1180.0  2011 
788  Orbital Brightness Modulation       2        0.342887   NaN    1180.0  2011 
794                        Transit       1        0.355000   NaN       NaN  2013 
730                        Transit       3        0.453285   NaN      38.7  2011 

Pudiéndose comprobar fácilmente que los nulos se sitúan nulos al final.

by_period.tail()
       method  number  orbital_period  mass  distance  year
949   Imaging       1             NaN   NaN     120.0  2013
950   Imaging       1             NaN   NaN       NaN  2010
957   Imaging       1             NaN   NaN       NaN  2008
1027  Imaging       1             NaN   NaN      19.2  2011
1029  Imaging       1             NaN   NaN      10.1  2012

Para modificar el orden existe la propiedad na_position en la que se puede indicar si estos han de estar la principio. Así, para que los nulos sean los primero simplemente se ha de ejecutar la siguiente línea.

by_period = planets.sort_values('orbital_period', na_position='first')
by_period.tail()
      method  number  orbital_period  mass  distance  year
900  Imaging       1         40000.0   NaN       NaN  2011
644  Imaging       4         69000.0   NaN     39.94  2008
643  Imaging       4        170000.0   NaN     39.94  2008
68   Imaging       1        318280.0   NaN      7.69  2008
937  Imaging       1        730000.0   NaN       NaN  2006

Ordenar el propio dataframe

En los ejemplos anteriores se puede ver que al ordenarse los datos se ha creado en todo momento un objeto nuevo. En caso de que no se desee este comportamiento se puede indicar mediante la opción inplace que se ordene el propio objeto. Con lo que se evita aumentar la memoria consumida por el programa. Así para ordenar por año en el propio objeto se puede emplear.

Publicidad


planets.sort_values('year', inplace=True)
planets.head()
              method  number  orbital_period    mass  distance  year
441  Radial Velocity       1       83.888000  11.680     40.57  1989
942    Pulsar Timing       3       66.541900     NaN       NaN  1992
941    Pulsar Timing       3       25.262000     NaN       NaN  1992
943    Pulsar Timing       3       98.211400     NaN       NaN  1994
16   Radial Velocity       1        4.230785   0.472     15.36  1995

Ordenar el dataframe en base al índice

En el caso de querer volver a la situación original se puede ordenar el conjunto de datos en base al índice. Lo que requiere utilizar la propiedad sort_index(), al que por defecto no hay que pasarle ningún parámetro.

planes_sort = planets.sort_index()
planes_sort.head()
            method  number  orbital_period   mass  distance  year
0  Radial Velocity       1         269.300   7.10     77.40  2006
1  Radial Velocity       1         874.774   2.21     56.95  2008
2  Radial Velocity       1         763.000   2.60     19.84  2011
3  Radial Velocity       1         326.030  19.40    110.62  2007
4  Radial Velocity       1         516.220  10.50    119.47  2009

Véase que en este caso los registros se ordenan en base al valor del índice.

Ordenar por los valores de más de una columna

Finalmente puede ser necesario ordenar los valores por más de una columna. Primero por una y luego por otra. Esto se puede hacer indicando al método sort_values() un vector de columnas en lugar de una cadena de texto. Por ejemplo, se pueden ordenar los planetas por año y periodo orbital el siguiente resultado.

by_year_period = planets.sort_values(['year', 'orbital_period'])
by_year_period.head()
              method  number  orbital_period    mass  distance  year
441  Radial Velocity       1       83.888000  11.680     40.57  1989
941    Pulsar Timing       3       25.262000     NaN       NaN  1992
942    Pulsar Timing       3       66.541900     NaN       NaN  1992
943    Pulsar Timing       3       98.211400     NaN       NaN  1994
16   Radial Velocity       1        4.230785   0.472     15.36  1995

En este se puede ver que los planetas descubiertos en el 1992 hay dos que están ordenados por su periodo.

Conclusiones

Saber ordenar dataframes en pandas permiten realizar muchos análisis básicos con los que realizar descubrimientos. Hoy se han visto los métodos disponibles en pandas para realizar esta tarea.

Publicidad


La importancia de saber ordenar conjuntos de datos se puede observar porque todas las plataformas cuentan con estas herramientas. Por ejemplo, en R también existen herramientas para ordenar los conjuntos de datos. O las herramientas que existen en Python para ordenar diccionarios.

Imágenes: Pixabay (Katzenfee50)

¿Te ha parecido de utilidad el contenido?

¡Puntúalo entre una y cinco estrellas!

Puntuación promedio 5 / 5. Votos emitidos: 4

Ya que has encontrado útil este contenido...

¡Síguenos en redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?

Publicaciones relacionadas

  • Introducción a Seaborn: Una visión general de la biblioteca
    Introducción a Seaborn: Una visión general de la biblioteca
  • Gráficos de correlación en Seaborn: Mapas de calor y gráficos de pares
    Gráficos de correlación en Seaborn: Mapas de calor y…
  • pandas
    Ordenar un DataFrame en base a dos o más columnas
  • Creación de tablas resumen en Python con Sidetable
    Creación de tablas resumen en Python con Sidetable
  • Uso de Eval en Pandas para analizar datos de forma sencilla
    Uso de Eval en Pandas para analizar datos de forma sencilla
  • Uso del método de Pandas <code>diff()</code> con cadenas de texto
    Uso del método de Pandas diff() con cadenas de texto

Publicado en: Python Etiquetado como: Pandas

Interacciones con los lectores

Comentarios

  1. jose dice

    mayo 16, 2022 a las 12:34 pm

    Hola, como lo harías si quisieras ordenar por la cantidad de elementos de la primera columna, es decir, si hay mas columnas de Pulsar Timing que de Radial Velocity

    Responder
    • Daniel Rodríguez dice

      mayo 16, 2022 a las 1:15 pm

      No entiendo el problema, ¿contar el número de ocurrencias y ordenar en base a ese valor? En ese caso una posible solución sería crear una nueva columna con este valor y ordenar en base a esa.

      Responder

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

I accept the Terms and Conditions and the Privacy Policy

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Publicidad




Barra lateral principal

Suscríbete a nuestro boletín

Suscríbete al boletín semanal para estar al día de todas las publicaciones.

Política de Privacidad

Analytics Lane en redes sociales

  • Amazon
  • Facebook
  • GitHub
  • Instagram
  • Pinterest
  • RSS
  • Twitter
  • Tumblr
  • YouTube

Publicidad

Entradas recientes

El método de Hare-Niemeyer y su implementación en Python

septiembre 29, 2023 Por Daniel Rodríguez

Redimensionar una partición de disco LVM con espacio no asignado en Linux

septiembre 27, 2023 Por Daniel Rodríguez

¿Cómo saber la versión de Pandas o cualquier otra librería en Python?

septiembre 25, 2023 Por Daniel Rodríguez

Publicidad

Es tendencia

  • ¿Cómo cambiar el nombre de las columnas en Pandas? publicado el mayo 6, 2019 | en Python
  • Seleccionar filas y columnas en Pandas con iloc y loc publicado el junio 21, 2019 | en Python
  • pandas Pandas: Cambiar los tipos de datos en los DataFrames publicado el julio 15, 2021 | en Python
  • Numpy básico: valores mínimos y máximos en arrays Numpy publicado el octubre 23, 2019 | en Python
  • Unir y combinar dataframes con pandas en Python publicado el septiembre 10, 2018 | en Python

Publicidad

Lo mejor valorado

4.9 (22)

Seleccionar filas y columnas en Pandas con iloc y loc

4.7 (12)

Operaciones de filtrado de DataFrame con Pandas en base a los valores de las columnas

4.6 (15)

Archivos JSON con Python: lectura y escritura

4.5 (10)

Diferencias entre var y let en JavaScript

4.3 (12)

Ordenación de diccionarios en Python mediante clave o valor

Publicidad

Comentarios recientes

  • Daniel Rodríguez en ¿Cómo eliminar columnas y filas en un dataframe pandas?
  • Miguel en ¿Cómo eliminar columnas y filas en un dataframe pandas?
  • alberto en Resolver problema de credenciales en Bitbucket
  • Pablo en Aplicar el método D’Hondt en Excel
  • Agapito en Creación de un EXE desde un archivo Python en Windows

Publicidad

Footer

Analytics Lane

  • Acerca de Analytics Lane
  • Boletín de noticias
  • Contacto
  • Libros
  • Lo más popular
  • Noticias
  • Tienda
  • Tiendas afiliadas

Secciones

  • Ciencia de datos
  • Criptografía
  • Herramientas
  • Machine Learning
  • Opinión
  • Productividad
  • Programación
  • Reseñas

Sobre de Analytics Lane

En Analytics Lane tratamos de explicar los principales conceptos de la ciencia e ingeniería de datos con un enfoque práctico. Los principales temas tratados son ciencia de datos, ingeniería de datos, inteligencia artificial, machine learning, deep learning y criptografía. Además, también se habla de los principales lenguajes de programación y herramientas utilizadas por los científicos e ingenieros de datos.

Copyright © 2018-2023 Analytics Lane ·Términos y condiciones ·Política de Cookies ·Política de Privacidad ·Herramientas de privacidad ·Contacto