Función Pandas df.sort_values()
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 (si
inplace=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
# 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:
- La forma de ordenación predeterminada es ascendente (de menor a mayor).
- La calificación de matemáticas 78 se coloca al principio, y 92 al final.
- 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
# 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:
- Usando
ascending=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
# 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 lista
by=['班级', '数学']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'.
- Usando
ascending=[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 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 establece
na_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
# 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 usar
ignore_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
# 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.
- Usando
key=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
# 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 usar
inplace=True, el DataFrame se modifica en sí mismo y ya no devuelve un nuevo objeto. - Los
idantes 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 especifique
inplace=True), el DataFrame original permanece sin cambios. - Usando
ignore_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.
Otras extensiones
Funciones comunes de Pandas