Función Pandas df.loc()

Pandas 常用函数Funciones comunes de Pandas


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

import pandas as pd

# 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:

  1. De forma predeterminada, el índice de DataFrame son los enteros 0, 1, 2, 3, 4.
  2. df.loc[0]Seleccionar la fila con etiqueta de índice 0 devuelve un Series.
  3. df.loc[[1, 3, 4]]Seleccionar filas con varios índices específicos.
  4. 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

import pandas as pd

# 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

import pandas as pd

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:

  1. df.loc['b', ['name', 'score']]Seleccionar columnas específicas de una fila específica devuelve un Series.
  2. df.loc[['a', 'c'], ['name', 'age']]Seleccionar varias filas y varias columnas devuelve un DataFrame.
  3. df.loc[:, ['name', 'grade']]Los dos puntos indican seleccionar todas las filas.
  4. 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

import pandas as pd

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:

  1. df.loc[df['score'] > 85]El filtrado con condiciones booleanas devuelve las filas que cumplen la condición.
  2. Las condiciones compuestas deben encerrarse entre paréntesis y usar&(Y) y|(O) para conectarlas.
  3. Se puede pasar directamente un array booleano (la longitud debe ser igual al número de filas) para seleccionar filas.
  4. 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.

Pandas 常用函数Funciones comunes de Pandas

Otras extensiones