Función Pandas df.iloc[]
iloc[]Es el método de indexación basado en la posición entera (Integer Location) en Pandas, utilizado para seleccionar datos mediante números de fila y columna. Y estoloc[]es diferente,iloc[]Se basa completamente en la posición de los datos (índice entero comenzando desde 0), sin considerar las etiquetas establecidas por los propios datos.
Cuando necesitas seleccionar datos por posición, o seleccionar datos sin conocer las etiquetas de índice específicas,iloc[]es la mejor opción. Su forma de funcionar es muy similar a la indexación de listas de Python, lo que es muy intuitivo para los usuarios de Python.
Sintaxis básica y parámetros
iloc[]Es el indexador de DataFrame, mediante corchetes[]para acceder. Solo acepta enteros, listas de enteros, slices de enteros o matrices booleanas como parámetros.
Formato de sintaxis
# 选择单行(返回 Series) DataFrame.iloc[行号] # 选择多行(返回 DataFrame) DataFrame.iloc[[行号1, 行号2, ...]] # 使用切片选择连续行 DataFrame.iloc[起始行:结束行] # 选择行和列 DataFrame.iloc[行号, 列号] DataFrame.iloc[行切片, 列切片] DataFrame.iloc[行列表, 列列表]
Descripción de parámetros
| Posición del parámetro | Tipo de parámetro | Descripción |
|---|---|---|
| Primer parámetro (filas) | Entero, lista de enteros, slice de enteros, matriz booleana | Se utiliza para seleccionar filas, basado en la posición (desde 0). |
| Segundo parámetro (columnas) | Entero, lista de enteros, slice de enteros | Opcional, se utiliza para seleccionar columnas, también basado en la posición. |
Descripción del valor de retorno
- Elemento único: Devuelve un valor escalar.
- Una sola fila: Devuelve un Series.
- Múltiples filas: Devuelve un DataFrame.
- Combinación de filas y columnas: Según el resultado de la selección, devuelve un Series o un DataFrame.
Ejemplos
Vamos a dominar completamente con abundantes ejemplosiloc[]el uso de.
Ejemplo 1: Uso básico - Seleccionar filas
iloc[]Utiliza la indexación basada en posición, muy similar a la forma de indexación de las listas de Python.
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()
# Seleccionar la primera fila (índice 0)
print("Seleccionar la primera fila (posición 0):")
print(df.iloc[0])
print()
# Seleccionar múltiples filas
print("Seleccionar las filas 1, 3 y 4:")
print(df.iloc[[1, 3, 4]])
print()
# Usar slices para seleccionar filas consecutivas (nota: el slice de iloc es cerrado por la izquierda y abierto por la derecha, igual que en Python)
print("Seleccionar las filas 1 a 3 (posiciones 1, 2, 3):")
print(df.iloc[1:4])
print()
# Seleccionar las primeras 3 filas
print("Las primeras 3 filas:")
print(df.iloc[: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 行(位置 1、2、3):
name age score grade
1 Bob 19 92 A
2 Charlie 17 78 B
3 David 18 90 A
前 3 行:
name age score grade
0 Alice 18 85 A
1 Bob 19 92 A
2 Charlie 17 78 B
Análisis del código:
df.iloc[0]Selecciona la primera fila (posición 0) y devuelve un Series.iloc[]El slice es cerrado por la izquierda y abierto por la derecha; incluye las posiciones 1, 2, 3 y no incluye la posición 4.df.iloc[[1, 3, 4]]Selecciona filas en varias posiciones específicas.df.iloc[:3]Omitir la posición inicial indica que se comienza desde 0.
Ejemplo 2: Seleccionar filas y columnas específicas
iloc[]Puede seleccionar filas y columnas a la vez, localizando con precisión mediante números de posición.
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)
# Seleccionar una sola celda (segunda fila, tercera columna)
print("Seleccionar la celda en la posición [1, 2]:")
print(df.iloc[1, 2]) # Devuelve 92
print()
# Seleccionar columnas específicas de filas específicas
print("Seleccionar las columnas 1 y 3 de la fila 0:")
print(df.iloc[0, [1, 3]])
print()
# Seleccionar múltiples filas y múltiples columnas
print("Seleccionar las columnas 0 y 2 de las filas 0, 2 y 4:")
print(df.iloc[[0, 2, 4], [0, 2]])
print()
# Seleccionar columnas específicas de todas las filas
print("Columnas 0 y 2 de todas las filas:")
print(df.iloc[:, [0, 2]])
print()
# Combinar slice de filas y slice de columnas
print("Columnas de la 0 a la 2 (sin incluir) de las filas 1 a 3:")
print(df.iloc[1:4, :3])
Resultado de la ejecución:
选择位置 [1, 2] 的单元格:
92
选择第 0 行的第 1 和第 3 列:
age 19
grade A
Name: 0, dtype: object
选择第 0、2、4 行的第 0、2 列:
name score
0 Alice 85
2 Charlie 78
4 Eve 88
所有行的第 0 和第 2 列:
name score
0 Alice 85
1 Bob 92
2 Charlie 78
3 David 90
4 Eve 88
第 1 到 3 行的第 0 到第 2 列(不含):
name age
1 Bob 19
2 Charlie 17
3 David 18
Análisis del código:
df.iloc[1, 2]Selecciona una sola celda y devuelve un valor escalar.df.iloc[0, [1, 3]]Selecciona múltiples columnas de una fila específica.df.iloc[:, [0, 2]]Los dos puntos indican que se seleccionan todas las filas.iloc[]El slice sigue la convención de Python: cerrado por la izquierda y abierto por la derecha (sin incluir la posición final).
Ejemplo 3: Uso combinado con índices personalizados
Cuando el DataFrame tiene un índice personalizado,iloc[]sigue seleccionando datos por posición, independientemente de las etiquetas de índice.
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]
}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd', 'e'])
print("DataFrame con índice personalizado:")
print(df)
print()
# iloc sigue seleccionando por posición, no se ve afectado por el índice personalizado
print("iloc)
print(df.iloc[0])
print()
print("iloc[1:3] selecciona las filas 2 y 3 (posiciones 1, 2):")
print(df.iloc[1:3])
print()
# Usar índices negativos (contando desde el final)
print("Última fila (posición -1):")
print(df.iloc[-1])
print()
print("Las 3 últimas filas:")
print(df.iloc[-3:])
Resultado de la ejecución:
带自定义索引的 DataFrame:
name age score
a Alice 18 85
b Bob 19 92
c Charlie 17 78
d David 18 90
e Eve 20 88
iloc[0] 选择第一行(位置 0),与标签 'a', 'b', 'c' 无关:
name Alice
age 18
score 85
Name: a, dtype: object
iloc[1:3] 选择第 2、3 行(位置 1、2):
name age score
b Bob 19 92
c Charlie 17 78
最后一行(位置 -1):
name Eve
age 20
score 88
Name: e, dtype: object
倒数 3 行:
name age score
c Charlie 17 78
d David 18 90
e Eve 20 88
Análisis del código:
- Aunque el DataFrame use un índice personalizado ('a', 'b', 'c', 'd', 'e'),
iloc[]sigue seleccionando por posición. iloc[0]Siempre selecciona la primera fila (posición física), sin importar cuál sea la etiqueta de índice.ilocAdmite índices negativos: -1 indica la última fila, -2 la penúltima, y así sucesivamente.
Ejemplo 4: Selección con matrices booleanas
iloc[]También admite la selección con matrices booleanas, lo cual es útil en el filtrado por condiciones.
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)
# Seleccionar usando una matriz booleana
bool_array = [True, False, True, False, True]
print("Filas seleccionadas usando la matriz booleana [True, False, True, False, True]:")
print(df.iloc[bool_array])
print()
# Usar combinado con condiciones (primero calcular la matriz booleana y luego usarla en iloc)
# Seleccionar las filas con puntuación mayor que 85
condition = df['score'] > 85
print("Filas con puntuación mayor que 85:")
print(df.iloc[condition.values]) # Obtener la matriz booleana
print()
# Después de seleccionar filas en posiciones específicas, seleccionar columnas específicas
print("Columnas 1 y 2 de las filas 1 y 3:")
print(df.iloc[[1, 3], 1:3])
Resultado de la ejecución:
使用布尔数组 [True, False, True, False, True] 选择的行:
name age score grade
0 Alice 18 85 A
2 Charlie 17 78 B
4 Eve 20 88 B
分数大于 85 的行:
name age score grade
1 Bob 19 92 A
3 David 18 90 A
4 Eve 20 88 B
第 1、3 行的第 1、2 列:
age score
1 19 92
3 18 90
Análisis del código:
- La longitud de la matriz booleana debe ser igual al número de filas (para la selección de filas) o de columnas (para la selección de columnas).
ilocAl usar matrices booleanas, a diferencia delloc[]filtrado condicional, selecciona directamente por posición.- Se pueden seleccionar patrones específicos mediante el paso del slice, por ejemplo, seleccionar una fila sí y una no.
Notas
iloc[]Se utiliza indexación posicional; el slice sigue la convención de Python (cerrado por la izquierda y abierto por la derecha).- Si la posición pasada está fuera de rango, se lanzará un error IndexError.
- Admite índices negativos; -1 indica la última fila, -2 la penúltima.
- y
loc[]A diferencia de,iloc[]no admite el filtrado directo con expresiones condicionales; es necesario calcular primero una matriz booleana.
Importante:
loc[]yiloc[]La diferencia entre ambos es un punto clave en el aprendizaje de Pandas.loc[]Basado en etiquetas,iloc[]Basado en posición. Se recomienda distinguir claramente entre ambos durante el desarrollo para evitar errores causados por confusión.
Resumen
iloc[]Es un selector de datos basado en la posición entera en Pandas; proporciona una experiencia de indexación similar a la de las listas de Python. Su principal característica es que se basa completamente en la posición de los datos (desde 0) y no se ve afectado por las etiquetas de índice personalizadas.
En el uso práctico,iloc[]es especialmente adecuado para los siguientes escenarios: cuando se necesita seleccionar datos por posición, cuando se necesitan índices negativos, cuando se necesita usar el paso en los slices, y cuando se seleccionan datos sin conocer las etiquetas de índice. Combinado conloc[]yiloc[], puede responder con flexibilidad a diversas necesidades de selección de datos.
Funciones comunes de Pandas