Función Pandas df.loc()
loc[]Es un método de indexación basado en etiquetas (Label) en Pandas, utilizado para seleccionar datos mediante etiquetas de filas y columnas. Es una de las formas más intuitivas y comunes de indexación de DataFrame, capaz de localizar con precisión los datos que necesitamos.
A diferencia de la indexación basada en posición (comoiloc[]),loc[]utiliza las etiquetas de índice establecidas por los propios datos. Esto significa que incluso si cambia la posición de los datos, mientras las etiquetas no cambien, aún podemos seleccionar con precisión los datos objetivo.
Sintaxis básica y parámetros
loc[]Es el indexador de DataFrame, a través de corchetes[]para acceder. Dentro de los corchetes se pueden pasar varios tipos de parámetros para seleccionar filas, columnas o celdas específicas.
Formato de sintaxis
# 选择单行(返回 Series) DataFrame.loc[行标签] # 选择多行(返回 DataFrame) DataFrame.loc[[行标签1, 行标签2, ...]] # 选择行和列 DataFrame.loc[行标签, 列标签] DataFrame.loc[行切片, 列切片] DataFrame.loc[行条件, 列条件]
Descripción de parámetros
| Posición del parámetro | Tipo de parámetro | Descripción |
|---|---|---|
| Primer parámetro (filas) | Etiqueta, lista de etiquetas, segmento de etiquetas, array booleano | Se utiliza para seleccionar filas; puede ser una sola etiqueta, varias etiquetas, un segmento o una expresión condicional. |
| Segundo parámetro (columnas) | Etiqueta, lista de etiquetas, segmento de etiquetas | Opcional, se utiliza para seleccionar columnas; la sintaxis es la misma que la selección de filas. |
Descripción del valor de retorno
- Elemento único: Devuelve un valor escalar (un solo valor).
- Fila única: Devuelve un Series.
- Varias filas: Devuelve un DataFrame.
- Combinación de filas y columnas: Devuelve un Series o un DataFrame según el resultado de la selección.
Ejemplos
Vamos a dominar por completo mediante abundantes ejemplosloc[]de uso.
Ejemplo 1: Uso básico - Usando el índice predeterminado
Cuando el DataFrame usa el índice entero predeterminado,loc[]el comportamiento esiloc[]similar, pero usa etiquetas en lugar de posiciones.
Ejemplo
# Crear un DataFrame de ejemplo
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'age': [18, 19, 17, 18, 20],
'score': [85, 92, 78, 90, 88],
'grade': ['A', 'A', 'B', 'A', 'B']
}
df = pd.DataFrame(data)
print("DataFrame original:")
print(df)
print()
# Usar loc para seleccionar una sola fila (mediante la etiqueta de índice)
print("Seleccionar la fila 0:")
print(df.loc[0])
print()
# Seleccionar varias filas
print("Seleccionar las filas 1, 3 y 4:")
print(df.loc[[1, 3, 4]])
print()
# Usar un segmento para seleccionar filas consecutivas (nota: el segmento de loc incluye ambos extremos)
print("Seleccionar de la fila 1 a la fila 3 (incluyendo ambos extremos):")
print(df.loc[1:3])
Resultado de la ejecución:
原始 DataFrame:
name age score grade
0 Alice 18 85 A
1 Bob 19 92 A
2 Charlie 17 78 B
3 David 18 90 A
4 Eve 20 88 B
选择第 0 行:
name Alice
age 18
score 85
grade A
Name: 0, dtype: object
选择第 1、3、4 行:
name age score grade
1 Bob 19 92 A
3 David 18 90 A
4 Eve 20 88 B
选择第 1 行到第 3 行(包含两端):
name age score grade
1 Bob 19 92 A
2 Charlie 17 78 B
3 David 18 90 A
Análisis del código:
- De forma predeterminada, el índice de DataFrame son los enteros 0, 1, 2, 3, 4.
df.loc[0]Seleccionar la fila con etiqueta de índice 0 devuelve un Series.df.loc[[1, 3, 4]]Seleccionar filas con varios índices específicos.- Importante:
loc[]el segmento incluye ambos extremos (a diferencia del segmento de Python),1:3incluye los índices 1, 2 y 3.
Ejemplo 2: Usar un índice personalizado
loc[]Su verdadera potencia radica en poder usar etiquetas de índice personalizadas; esta es suiloc[]diferencia fundamental.
Ejemplo
# Crear un DataFrame con índice personalizado
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'age': [18, 19, 17, 18, 20],
'score': [85, 92, 78, 90, 88],
'grade': ['A', 'A', 'B', 'A', 'B']
}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd', 'e'])
print("DataFrame con índice personalizado:")
print(df)
print()
# Usar una etiqueta personalizada para seleccionar una sola fila
print("Seleccionar la fila con índice 'b':")
print(df.loc['b'])
print()
# Usar un segmento con etiquetas personalizadas
print("Seleccionar las filas con índices de 'b' a 'd':")
print(df.loc['b':'d'])
print()
# Seleccionar varios índices no consecutivos
print("Seleccionar las filas con índices 'a', 'c', 'e':")
print(df.loc[['a', 'c', 'e']])
Resultado de la ejecución:
带自定义索引的 DataFrame:
name age score grade
a Alice 18 85 A
b Bob 19 92 A
c Charlie 17 78 B
d David 18 90 A
e Eve 20 88 B
选择索引为 'b' 的行:
name Bob
age 19
score 92
grade A
Name: b, dtype: object
选择索引 'b' 到 'd' 的行:
name age score grade
b Bob 19 92 A
c Charlie 17 78 B
d David 18 90 A
选择索引 'a', 'c', 'e' 的行:
name age score grade
a Alice 18 85 A
c Charlie 17 78 B
e Eve 20 88 B
Análisis del código:
- El índice personalizado usa las cadenas 'a', 'b', 'c', 'd', 'e' en lugar del índice entero.
loc[]Usar estas etiquetas para seleccionar datos es muy intuitivo.- El segmento 'b':'d' incluye las etiquetas 'b', 'c', 'd', y también incluye ambos extremos.
Ejemplo 3: Seleccionar columnas específicas
loc[]No solo se pueden seleccionar filas, sino también columnas al mismo tiempo.
Ejemplo
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'age': [18, 19, 17, 18, 20],
'score': [85, 92, 78, 90, 88],
'grade': ['A', 'A', 'B', 'A', 'B']
}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd', 'e'])
# Seleccionar columnas específicas de filas específicas
print("Seleccionar las columnas 'name' y 'score' de la fila con índice 'b':")
print(df.loc['b', ['name', 'score']])
print()
# Seleccionar varias filas y varias columnas
print("Seleccionar las columnas 'name' y 'age' de las filas con índices 'a', 'c':")
print(df.loc[['a', 'c'], ['name', 'age']])
print()
# Seleccionar columnas específicas de todas las filas
print("Las columnas 'name' y 'grade' de todas las filas:")
print(df.loc[:, ['name', 'grade']])
print()
# Combinar segmento de filas y segmento de columnas
print("De las filas con índice 'b' a 'd', las columnas de 'name' a 'score':")
print(df.loc['b':'d', 'name':'score'])
Resultado de la ejecución:
选择索引 'b' 的 name 和 score 列:
name Bob
score 92
Name: b, dtype: object
选择索引 'a', 'c' 的 name 和 age 列:
name age
a Alice 18
c Charlie 17
所有行的 name 和 grade 列:
name grade
a Alice A
b Bob A
c Charlie B
d David A
e Eve B
索引 'b' 到 'd' 的 name 到 score 列:
name age score
b Bob 19 92
c Charlie 17 78
d David 18 90
Análisis del código:
df.loc['b', ['name', 'score']]Seleccionar columnas específicas de una fila específica devuelve un Series.df.loc[['a', 'c'], ['name', 'age']]Seleccionar varias filas y varias columnas devuelve un DataFrame.df.loc[:, ['name', 'grade']]Los dos puntos indican seleccionar todas las filas.df.loc['b':'d', 'name':'score']Se usan segmentos tanto de filas como de columnas.
Ejemplo 4: Usar selección por condiciones booleanas
loc[]Admite el uso de arrays booleanos o expresiones condicionales para filtrar datos; es una funcionalidad muy potente.
Ejemplo
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'age': [18, 19, 17, 18, 20],
'score': [85, 92, 78, 90, 88],
'grade': ['A', 'A', 'B', 'A', 'B']
}
df = pd.DataFrame(data)
# Usar una condición booleana para seleccionar filas con puntuación mayor que 85
print("Estudiantes con puntuación mayor que 85:")
print(df.loc[df['score'] > 85])
print()
# Condición compuesta: puntuación mayor que 85 y edad menor que 19
print("Estudiantes con puntuación mayor que 85 y edad menor que 19:")
print(df.loc[(df['score'] > 85) & (df['age'] 85, ['name', 'score']])
Resultado de la ejecución:
分数大于 85 的学生:
name age score grade
1 Bob 19 92 A
3 David 18 90 A
4 Eve 20 88 B
分数大于 85 且年龄小于 19 的学生:
name age score grade
3 David 18 90 A
使用布尔数组选择的行:
name age score grade
0 Alice 18 85 A
2 Charlie 17 78 B
4 Eve 20 88 B
分数大于 85 的学生的 name 和 score:
name score
1 Bob 92
3 David 90
4 Eve 88
Análisis del código:
df.loc[df['score'] > 85]El filtrado con condiciones booleanas devuelve las filas que cumplen la condición.- Las condiciones compuestas deben encerrarse entre paréntesis y usar
&(Y) y|(O) para conectarlas. - Se puede pasar directamente un array booleano (la longitud debe ser igual al número de filas) para seleccionar filas.
- Después de la condición también se puede especificar la selección de columnas, lo que permite un filtrado de datos más preciso.
Notas
loc[]Utiliza indexación por etiquetas; el segmento incluye ambos extremos (a diferencia del segmento nativo de Python).- Si la etiqueta proporcionada no existe, se lanzará un error KeyError.
- En las condiciones booleanas, las condiciones compuestas deben usar paréntesis y utilizar
&y|en lugar de los operadores de Python.andyor。 loc[]Leer y modificar datos es muy conveniente, pero en escenarios de Big Data se debe prestar atención al rendimiento.
Nota importante:
loc[]yiloc[]Son dos indexadores diferentes; aunque parecen similares, sus principios son completamente distintos:loc[]Uno está basado en etiquetas,iloc[]el otro en posición.
Resumen
loc[]Es un selector de datos basado en etiquetas en Pandas, que proporciona una forma intuitiva y flexible de acceso a los datos. Mediante la combinación de etiquetas de filas y columnas, podemos seleccionar con precisión cualquier dato que necesitemos.
Sus principales ventajas incluyen: el uso de índices personalizados hace que el código sea más legible, admite sintaxis de segmentos con inclusión de ambos extremos y puede combinarse con condiciones booleanas para filtrados complejos. En el análisis de datos real,loc[]es una de las formas de indexación más utilizadas en el uso diario.
Funciones comunes de Pandas