LOC vs ILOC en Pandas: Diferencia entre LOC e ILOC en Pandas
Publicado: 2020-08-01Tabla de contenido
Loc e iloc en Pandas
Una causa común de confusión entre los nuevos desarrolladores de Python es loc vs. iloc. Ambos parecen muy similares y realizan tareas similares. Así que esto puede desconcertar a cualquier estudiante.
Si desea averiguar la diferencia entre iloc y loc, ha venido al lugar correcto, porque en este artículo discutiremos este tema en detalle. Descubrirá cuál es la diferencia clave entre estas funciones y luego las verá en acción para comprender mejor el concepto. Consulte nuestros cursos de ciencia de datos para obtener más información sobre Pandas.
Empecemos.
Diferencia entre loc e iloc
1. iloc en Python
Puede usar iloc en Python para la selección. Se basa en la ubicación de enteros y le ayuda a seleccionar por posición. Entonces, si desea encontrar la fila con el índice 5, iloc le mostrará la quinta fila del marco de datos, independientemente de su nombre o etiqueta.
Aquí hay un ejemplo de iloc en Python:
>>> midict = [{'a': 1, 'b': 2, 'c': 3, 'd': 4},
… {'a': 100, 'b': 200, 'c': 300, 'd': 400},
… {'a': 1000, 'b': 2000, 'c': 3000, 'd': 4000 }]
>>> df = pd.DataFrame(mydict)
>>> df
a B C D
0 1 2 3 4
1 100 200 300 400
2 1000 2000 3000 4000
Indexaremos las filas con un entero escalar usando la función iloc para el marco de datos anterior:
>>> tipo(df.iloc[0])
<clase 'pandas.core.series.Series'>
>>> df.iloc[0]
un 1
segundo 2
do 3
re 4
Nombre: 0, tipo de d: int64
2. ubicación en Pandas
Puede usar loc en Pandas para acceder a múltiples filas y columnas usando etiquetas; sin embargo, también puede usarlo con una matriz booleana.
Si usa loc para encontrar una fila con el índice 5, no obtendrá la quinta fila con ella. En cambio, solo obtendrá la fila que tiene el nombre '5'.
Aquí hay un ejemplo de loc en Pandas:
>>> df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
… index=['cobra', 'víbora', 'sidewinder'],
… columnas=['max_speed', 'escudo'])
>>> df
escudo max_speed
cobra 1 2
víbora 4 5
viento lateral 7 8
Lo anterior fue la tabla de la que extraeremos la fila:
>>> df.loc['víbora']
velocidad_máxima 4
escudo 5
Nombre: viper, dtype: int64
Ejemplo detallado de loc vs iloc
Aunque usamos ambas funciones para la selección, sería mejor si analizáramos un ejemplo detallado para comprender sus distinciones.
En nuestro ejemplo, usaremos el conjunto de datos de clientes de telecomunicaciones, que está disponible en kaggle. Lo agregaremos a un marco de datos:
df = pd.read_csv(“Proyectos/churn_prediction/Telco-Customer-Churn.csv”)
df.cabeza ()
IDENTIFICACIÓN | género | Sr.Ciudadano | Compañero | dependientes | tenencia | Teléfono | MultipleLines | Internet | Seguridad | |
0 | 7590-VHVEG | Mujer | 0 | sí | No | 1 | No | Sin teléfono | ADSL | No |
1 | 5575-GNVDE | Masculino | 0 | No | No | 34 | sí | No | ADSL | sí |
2 | 3668-QPYBK | Masculino | 0 | No | No | 2 | sí | No | ADSL | sí |
Este conjunto de datos tiene 21 columnas; solo hemos mostrado algunos con fines de demostración. Como ya hemos discutido, usamos loc para seleccionar datos por la etiqueta. Aquí, los nombres de las columnas son sus etiquetas de columna, como género, tenencia, OnlineSecurity; todos ellos son los nombres de las columnas, así como las etiquetas.
Como no hemos asignado ningún índice específico, pandas crearía un índice entero para las filas de forma predeterminada. Las etiquetas de las filas son números enteros, que comienzan en 0 y van hacia arriba. En este ejemplo, veremos cómo loc e iloc se comportan de manera diferente.
- Seleccione la fila "1" y la columna "Socio"
df.loc[1, 'Socio']
Salida: 'No'
Muestra el valor presente en la columna 'Socio' de la fila '1'.
- Seleccione las etiquetas de fila '4' y las columnas 'ID de cliente' y 'género'
df.loc[:4, ['ID de cliente', 'género']]
Identificación del cliente | género | |
0 | 7590-VHVEG | Mujer |
1 | 5575-GNVDE | Masculino |
2 | 3668-QPYBK | Masculino |
3 | 7795-CFOCW | Masculino |
4 | 9237-HQITU | Mujer |
- Seleccione las etiquetas de fila "1", "2", "3" y la columna "Dependientes"
df.loc[[1,2,3], 'Dependientes']
1 No
2 No
3 No
Nombre: Dependientes, dtype: objeto
Esta vez, filtraremos el marco de datos y aplicaremos iloc o loc:
- Seleccione etiquetas de fila para las columnas "10" y "PhoneService" e "InternetService" de un cliente que tiene un socio (el socio debe ser 'sí')
df [df.Socio == 'Sí'].loc:10, ['ServicioTeléfono', 'ServicioInternet']]
En el caso anterior, aplicamos un filtro a la base de datos pero no cambiamos el índice, por lo que nuestra salida omitió varias etiquetas de las filas que requería nuestro filtro. Entonces, al usar loc[:10] aquí, seleccionamos las filas que tenían etiquetas hasta "10".
Si, por otro lado, usamos iloc aquí y aplicamos el filtro, obtendremos 10 filas ya que iloc selecciona por posición independientemente de las etiquetas. Este es el resultado que obtendremos si aplicamos iloc[:10]:

df[df.Socio == 'Sí'].iloc[:10, [6,8]]
Servicio telefónico | Servicio de Internet | |
0 | No | ADSL |
8 | sí | Fibra óptica |
10 | sí | ADSL |
12 | sí | Fibra óptica |
15 | sí | Fibra óptica |
18 | sí | ADSL |
21 | sí | No |
23 | sí | ADSL |
24 | sí | ADSL |
26 | sí | Fibra óptica |
Debes haber notado que tenemos que cambiar nuestro método para seleccionar columnas.
Leer: Tutorial de Python Pandas
- Seleccione las primeras 5 columnas y las primeras 5 filas con iloc
df.iloc[:4, :4]
Identificación del cliente | género | Ciudadano mayor | Compañero | |
0 | 7590-VHVEG | Mujer | 0 | sí |
1 | 5575-GNVDE | Masculino | 0 | No |
2 | 3668-QPYBK | Masculino | 0 | No |
3 | 7795-CFOCW | Masculino | 0 | No |
Podemos usar iloc para seleccionar posiciones desde el final. Para eso, simplemente tendremos que usar números enteros negativos (-1, -2, etc.) y comenzar con ellos.
- Seleccione las últimas 5 columnas y las últimas 5 filas
df.iloc[-5:, -5:]
Facturación sin papel | Método de pago | Cargos mensuales | Cargos totales | Batir | |
7038 | sí | Cheque enviado por correo | 84.80 | 1990.5 | No |
7039 | sí | Tarjeta de crédito | 103.20 | 7362.9 | No |
7040 | sí | cheque electronico | 29.60 | 346.45 | No |
7041 | sí | cheque enviado por correo | 74.40 | 306.6 | sí |
7042 | sí | Transferencia bancaria | 105.65 | 6844.5 | No |
También puede usar la función lambda con iloc. (Una función lambda es una pequeña función anónima en Python que puede tener una sola expresión pero cualquier número de argumentos)
- Seleccione cada tercera fila hasta la 15 y solo muestre las columnas "servicio de Internet" y "Socio"
df.iloc[ lambda x: (x.index x 3 == 0) & (x.index <= 150]['Socio', 'InternetService' ]]
Compañero | Servicio de Internet | |
0 | sí | ADSL |
3 | No | ADSL |
6 | No | Fibra óptica |
9 | No | ADSL |
12 | sí | Fibra óptica |
15 | sí | Fibra óptica |
También podemos seleccionar etiquetas o posiciones presentes en el medio.
- Seleccione las posiciones de columna entre 4 y 6, y las posiciones de fila entre 20 y 25
df.iloc[20:25, 4:6]
dependientes | tenencia | |
20 | No | 1 |
21 | No | 12 |
22 | No | 1 |
23 | No | 58 |
24 | No | 49 |
Ahora, si intenta pasar etiquetas a iloc, Pandas le mostrará el siguiente mensaje de error:
ValueError: la indexación basada en la ubicación solo puede tener tipos [entero, porción de entero (el punto de INICIO está INCLUIDO, el punto de FINALIZACIÓN está EXCLUIDO), tipo de lista de enteros, matriz booleana]
Obtendrá un error similar si pasa posiciones a loc.
Lea también: Preguntas de la entrevista de Pandas
Más información sobre Python
Un estudiante debe hacer preguntas y encontrar sus respuestas. Esperamos que este artículo haya respondido a sus preguntas sobre loc en Pandas (o iloc en Python). Sería mejor si probara estas funciones usted mismo en diferentes conjuntos de datos para comprender cómo funcionan.
Si desea obtener más información sobre Python, Pandas y temas relevantes, debe dirigirse a nuestro blog. Nuestros expertos agregan múltiples recursos detallados allí.
Si tiene curiosidad por aprender sobre ciencia de datos, consulte el Programa ejecutivo PG en ciencia de datos de IIIT-B y upGrad, creado para profesionales que trabajan y ofrece más de 10 estudios de casos y proyectos, talleres prácticos, tutoría con expertos de la industria, 1 -on-1 con mentores de la industria, más de 400 horas de aprendizaje y asistencia laboral con las mejores empresas.
¿Cómo podemos agregar filas de Pandas DataFrame?
Para insertar filas en el DataFrame, podemos usar los comandos loc, iloc e ix.
1. La ubicación se usa principalmente para las etiquetas de nuestro índice. Puede entenderse como cuando insertamos en loc 4, lo que indica que estamos buscando entradas de DataFrame con un índice de 4.
2. El iloc se usa principalmente para buscar ubicaciones en el índice. Es como si insertáramos en iloc 4, lo que indica que estamos buscando entradas de DataFrame que están presentes en el índice 4.
3. El caso ix es complicado porque le pasamos una etiqueta a ix si el índice está basado en números enteros. El ix 4 indica que estamos buscando en el DataFrame valores con un índice de 4.
¿Qué es la reindexación en el contexto de Pandas en Python?
Las etiquetas de fila y columna de un DataFrame se modifican cuando lo reindexamos. El término 'reindexar' se refiere al proceso de alinear datos a un conjunto específico de etiquetas a lo largo de un solo eje. En Pandas, la reindexación se puede usar para modificar el índice de las filas y columnas de un DataFrame. Muchas estructuras de datos de índice conectadas con muchas series de pandas o pandas DataFrame se pueden utilizar con índices.
¿Cuáles son algunas operaciones de datos en Pandas?
Hay varias operaciones de datos importantes para DataFrame en Pandas, que son las siguientes:
1. Selección de filas y columnas: al pasar los nombres de las filas y columnas, podemos seleccionar cualquier fila y columna en el DataFrame. Se vuelve unidimensional y se considera como una serie cuando lo selecciona del DataFrame.
2. Filtrado de datos: al usar algunas de las expresiones booleanas en DataFrame, podemos filtrar los datos.
3. Valores nulos: cuando no se proporcionan datos a los elementos, reciben un valor nulo. No puede haber valores en las diferentes columnas, que generalmente se representan como NaN.