Función Pandas df.sort_values()

Pandas 常用函数Funciones comunes de Pandas


df.sort_values()Es una función de Pandas que se utiliza para ordenar los datos de un DataFrame según una o más columnas.

Ordenar es una operación básica en el análisis de datos que ayuda a comprender mejor los datos y descubrir patrones.sort_values()Admite ordenar por una o varias columnas, en orden ascendente o descendente, y puede manejar valores faltantes; es una herramienta indispensable en el procesamiento de datos.


Sintaxis básica y parámetros

sort_values()Es una función miembro de DataFrame, invocada mediante el operador de punto.para llamarla.

Formato de sintaxis

DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False, key=None)

Descripción de parámetros

Parámetro Tipo ¿Obligatorio? Descripción Valor predeterminado
by str o lista de str Obligatorio Especifica el nombre de la columna utilizada para ordenar. Si es una lista, ordena secuencialmente según el orden de la lista. Ninguno
axis int o str Opcional Especifica el eje de ordenación.0o'index'Indica ordenar por columna (por defecto);1o'columns'Indica ordenar por fila. 0
ascending bool o lista de bool Opcional Especifica el orden de clasificación.TrueIndica orden ascendente (de menor a mayor);FalseIndica orden descendente (de mayor a menor). Si es una lista, se corresponde conbylas columnas de 'by' una a una. True
inplace bool Opcional Si esTrue, modifica directamente el DataFrame original y no devuelve un objeto nuevo; si esFalse, devuelve un nuevo DataFrame y los datos originales permanecen sin cambios. False
kind str Opcional Especifica el algoritmo de ordenación.'quicksort'(quicksort),'mergesort'(mergesort),'heapsort'(heapsort),'stable'(stable). 'quicksort'
na_position str Opcional Especifica la posición de los valores faltantes (NaN).'first'Indica colocarlos al principio;'last'Indica colocarlos al final. 'last'
ignore_index bool Opcional Si esTrue, restablece el índice después de ordenar, numerando desde 0; si esFalse, conserva el índice original. False
key callable Opcional Aplica una función a los datos antes de ordenar; se usa a menudo para reglas de ordenación personalizadas. None

Descripción del valor de retorno

  • Devuelve un nuevo DataFrame (siinplace=False), oNone(siinplace=True)。
  • Los datos del DataFrame devuelto están ordenados según las reglas especificadas.

Ejemplos

A través de una serie de ejemplos, dominaremos por completosort_values()el uso de esta función.

Ejemplo 1: Ordenar por una sola columna en orden ascendente

El uso más simple es ordenar de forma ascendente según los valores de una columna.

Ejemplo

import pandas as pd

# Crear un DataFrame de calificaciones de estudiantes
data = {
    'Nombre': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu', 'Qian Qi'],
    Matemáticas: [85, 92, 78, 90, 88],
    Inglés: [90, 85, 92, 88, 78]
}
df = pd.DataFrame(data)

print("datos originales:")
print(df)
print("=" * 50)

# Ordenar por puntuación de matemáticas en orden ascendente
df_sorted = df.sort_values(by=Matemáticas)

print("Después de ordenar las puntuaciones de matemáticas en orden ascendente:")
print(df_sorted)

Resultado esperado:

原始数据:
   姓名  数学  英语
0  张三   85   90
1  李四   92   85
2  王五   78   92
3  赵六   90   88
4  钱七   88   78
==================================================
按数学成绩升序排序后:
   姓名  数学  英语
2  王五   78   92
0  张三   85   90
4  钱七   88   78
3  赵六   90   88
1  李四   92   85

Análisis del código:

  1. La forma de ordenación predeterminada es ascendente (de menor a mayor).
  2. La calificación de matemáticas 78 se coloca al principio, y 92 al final.
  3. Después de ordenar, el índice se mantiene igual (2, 0, 4, 3, 1).

Ejemplo 2: Ordenar por una sola columna en orden descendente

Usandoascending=Falsese puede lograr la ordenación descendente.

Ejemplo

import pandas as pd

# Crear un DataFrame de calificaciones de estudiantes
data = {
    'Nombre': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu', 'Qian Qi'],
    Matemáticas: [85, 92, 78, 90, 88],
    Inglés: [90, 85, 92, 88, 78]
}
df = pd.DataFrame(data)

print("datos originales:")
print(df)
print("=" * 50)

# Ordenar por puntuación de matemáticas en orden descendente
df_sorted = df.sort_values(by=Matemáticas, ascending=False)

print("Después de ordenar las puntuaciones de matemáticas en orden descendente:")
print(df_sorted)

Resultado esperado:

原始数据:
   姓名  数学  英语
0  张三   85   90
1  李四   92   85
2  王五   78   92
3  赵六   90   88
4  钱七   88   78
==================================================
按数学成绩降序排序后:
   姓名  数学  英语
1  李四   92   85
3  赵六   90   88
4  钱七   88   78
0  张三   85   90
2  王五   78   92

Análisis del código:

  • Usandoascending=Falsese puede lograr una ordenación descendente de mayor a menor.
  • La calificación de matemáticas de Li Si, 92, se coloca al frente.

Ejemplo 3: Ordenar por múltiples columnas

Se puede ordenar por varias columnas: primero por la primera columna, y cuando hay valores iguales, se ordena por la segunda columna.

Ejemplo

import pandas as pd

# Crear un DataFrame de calificaciones de estudiantes
data = {
    'Nombre': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu', 'Qian Qi'],
    'Clase': ['Clase 1', 'Clase 2', 'Clase 1', 'Clase 2', 'Clase 1'],
    Matemáticas: [85, 92, 78, 90, 88]
}
df = pd.DataFrame(data)

print("datos originales:")
print(df)
print("=" * 50)

# Ordenar primero por clase, luego por calificación de matemáticas (ambos en orden ascendente)
df_sorted = df.sort_values(by=['Clase', Matemáticas])

print(Después de ordenar primero por clase y luego por calificación de matemáticas:)
print(df_sorted)
print("=" * 50)

# Ordenar por clase en orden ascendente y por calificación de matemáticas en orden descendente
df_sorted2 = df.sort_values(by=['Clase', Matemáticas], ascending=[True, False])

print(Ascendente por clase, descendente por calificación de matemáticas:)
print(df_sorted2)

Resultado esperado:

原始数据:
   姓名  班级  数学
0  张三  一班   85
1  李四  二班   92
2  王五  一班   78
3  赵六  二班   90
4  钱七  一班   88
==================================================
先按班级,再按数学成绩排序后:
   姓名  班级  数学
2  王五  一班   78
0  张三  一班   85
4  钱七  一班   88
3  赵六  二班   90
1  李四  二班   92
==================================================
按班级升序,数学成绩降序:
   姓名  班级  数学
4  钱七  一班   88
0  张三  一班   85
2  王五  一班   78
1  李四  二班   92
3  赵六  二班   90

Análisis del código:

  • Usando una listaby=['班级', '数学']se puede ordenar por múltiples columnas.
  • Primero se ordena por 'clase', la clase uno va delante y la clase dos detrás.
  • Dentro de la misma clase, se ordena por la calificación de 'matemáticas'.
  • Usandoascending=[True, False]se puede especificar una dirección de ordenación diferente para diferentes columnas.

Ejemplo 4: Ordenar con valores faltantes

Usandona_positionel parámetro permite controlar la posición de los valores faltantes.

Ejemplo

import pandas as pd
import numpy as np

# Crear un DataFrame que contenga valores faltantes
data = {
    'Nombre': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu'],
    'Calificaciones': [85, np.nan, 92, 78]
}
df = pd.DataFrame(data)

print("datos originales:")
print(df)
print("=" * 50)

# Por defecto: los valores faltantes se colocan al final
df_sorted_last = df.sort_values(by='Calificaciones')

print(Valores faltantes al final:)
print(df_sorted_last)
print("=" * 50)

# Colocar los valores faltantes al principio
df_sorted_first = df.sort_values(by='Calificaciones', na_position='first')

print(Valores faltantes al principio:)
print(df_sorted_first)

Resultado esperado:

原始数据:
   姓名   成绩
0  张三  85.0
1  李四   NaN
2  王五  92.0
3  赵六  78.0
==================================================
缺失值放在最后:
   姓名   成绩
3  赵六  78.0
0  张三  85.0
2  王五  92.0
1  李四   NaN
==================================================
缺失值放在最前:
   姓名   成绩
1  李四   NaN
3  赵六  78.0
0  张三  85.0
2  王五  92.0

Análisis del código:

  • Por defecto (na_position='last'), los valores faltantes se colocan al final.
  • Si se establecena_position='first', los valores faltantes se colocan al frente.

Ejemplo 5: Restablecer el índice después de ordenar

Después de ordenar, el índice puede no ser continuo; se puede usarignore_index=Truepara restablecer el índice.

Ejemplo

import pandas as pd

# Crear un DataFrame
data = {
    'Nombre': ['Zhang San', 'Li Si', 'Wang Wu'],
    'Calificaciones': [85, 92, 78]
}
df = pd.DataFrame(data)

print("datos originales:")
print(df)
print("=" * 50)

# Ordenar sin restablecer el índice
df_sorted = df.sort_values(by='Calificaciones')

print(Después de ordenar (conservando el índice original):)
print(df_sorted)
print("=" * 50)

# Ordenar y restablecer el índice
df_sorted_reset = df.sort_values(by='Calificaciones', ignore_index=True)

print(Después de ordenar (restablecer el índice):)
print(df_sorted_reset)

Resultado esperado:

原始数据:
   姓名  成绩
0  张三   85
1  李四   92
2  王五   78
==================================================
排序后(保留原始索引):
   姓名  成绩
2  王五   78
0  张三   85
1  李四   92
==================================================
排序后(重置索引):
   姓名  成绩
0  王五   78
1  张三   85
2  李四   92

Análisis del código:

  • Después de usarignore_index=True, el índice se reinicia desde 0.
  • Esto es más conveniente cuando posteriormente se necesita acceder a los datos por índice.

Ejemplo 6: Ordenamiento personalizado usando el parámetro key

keyEl parámetro permite aplicar una función personalizada a los datos antes de ordenar.

Ejemplo

import pandas as pd

# Crear un DataFrame de cadenas con mayúsculas y minúsculas mixtas
data = {
    Palabra: ['apple', 'Banana', 'cherry', 'APPLE', 'banana']
}
df = pd.DataFrame(data)

print("datos originales:")
print(df)
print("=" * 50)

# Ordenar alfabéticamente en orden ascendente (distinguiendo mayúsculas y minúsculas)
df_sorted_case = df.sort_values(by=Palabra)

print(Orden alfabético ascendente (distingue entre mayúsculas y minúsculas):)
print(df_sorted_case)
print("=" * 50)

# Usar el parámetro key para lograr una ordenación sin distinguir mayúsculas y minúsculas
df_sorted_nocase = df.sort_values(by=Palabra, key=lambda x: x.str.lower())

print(En orden alfabético ascendente (sin distinción de mayúsculas y minúsculas):)
print(df_sorted_nocase)

Resultado esperado:

原始数据:
    单词
0  apple
1  Banana
2  cherry
3  APPLE
4  banana
==================================================
按字母升序(区分大小写):
    单词
3  APPLE
0  apple
1  Banana
4  banana
2  cherry
==================================================
按字母升序(不区分大小写):
    单词
0  apple
3  APPLE
1  Banana
4  banana
2  cherry

Análisis del código:

  • La ordenación predeterminada distingue entre mayúsculas y minúsculas; las mayúsculas se colocan antes que las minúsculas.
  • Usandokey=lambda x: x.str.lower()todas las cadenas se convierten a minúsculas antes de ordenar, logrando una ordenación que no distingue entre mayúsculas y minúsculas.

Ejemplo 7: Modificación en el lugar usando el parámetro inplace

Usandoinplace=Truese puede modificar directamente el DataFrame original.

Ejemplo

import pandas as pd

# Crear un DataFrame
data = {
    'Nombre': ['Zhang San', 'Li Si', 'Wang Wu'],
    'Calificaciones': [85, 92, 78]
}
df = pd.DataFrame(data)

print("datos originales:")
print(df)
print(f"Datos originales id: {id(df)}")
print("=" * 50)

# Ordenar en el lugar usando inplace=True
df.sort_values(by='Calificaciones', inplace=True)

print("Después de ordenar con inplace=True:")
print(df)
print(fDatos ordenados id: {id(df)})

Resultado esperado:

原始数据:
   姓名  成绩
0  张三   85
1  李四   92
2  王五   78
原始数据 id: 140234567890
==================================================
使用 inplace=True 排序后:
   姓名  成绩
2  王五   78
0  张三   85
1  李四   92
排序后数据 id: 140234567890  # 同一个对象

Análisis del código:

  • Después de usarinplace=True, el DataFrame se modifica en sí mismo y ya no devuelve un nuevo objeto.
  • Losidantes y después de la ordenación son iguales, lo que indica que es el mismo objeto.
  • Este método puede ahorrar memoria, pero modificará los datos originales.

Consideraciones

  • sort_values()Por defecto, devuelve un nuevo DataFrame y no modifica los datos originales. Si quieres modificar en el lugar, usainplace=Truecomo parámetro.
  • La operación de ordenación no se realiza en el lugar (a menos que se especifiqueinplace=True), el DataFrame original permanece sin cambios.
  • Usandoignore_index=Truese puede restablecer el índice, lo cual resulta más conveniente para el procesamiento posterior de datos.
  • keyEl parámetro es muy potente y puede implementar varios tipos de ordenación personalizada, como sin distinguir entre mayúsculas y minúsculas, ordenar por valor absoluto, etc.
  • Al ordenar por múltiples columnas,ascendingpuede ser una lista, y las columnas debycorresponden uno a uno.

Pandas 常用函数Funciones comunes de Pandas

Otras extensiones