4.5 Usando iloc

Cómo usar iloc para aislar datos dentro de un marco de datos (filas primero, columnas segundo, inicio:final y corchetes)


Mira este video de 12:06 a 16:25

Para español, haga click en configuración, seleccione “español” debajo de los subtítulos.

Traducción por Guillermo Rodríguez Guerrero (UNAM ENES León, México).

# Para reproducir el siguiente tutorial, presiona shift + enter

from IPython.display import YouTubeVideo
from datetime import timedelta
start=int(timedelta(hours=0, minutes=12, seconds=6).total_seconds())
end=int(timedelta(hours=0, minutes=16, seconds=25).total_seconds())

YouTubeVideo("jEQRU55x0e4",start=start,end=end,width=640,height=360)

La siguiente es una transcripción del video.

💡 Recuerde: Importe pandas y lea el conjunto de datos a continuación para completar esta lección

# Importe pandas

import pandas as pd
# Decargue el conunto de datos del
# Jupyter Book para leer localmente o
# leer desde GitHub, a continuación:

data = pd.read_csv('https://raw.githubusercontent.com/DanChitwood/PlantsAndPython/master/co2_mlo_weekly.csv')

A continuación, veamos otra forma de encontrar datos específicos. y esto se llama función “iloc”. Y esto usará filas y columnas para encontrar los datos que quieres. Es algo así como Excel, piensa en qué filas y columnas deseas aislar de los datos. Lo puedes hacer, tanto para las filas como para las columnas, puedes usar la indexación con la notación de dos puntos de inicio y final que aprendiste antes.

Así que repasemos de nuevo como se ven nuestros datos, recuerda que usamos “head”, que solo trae de vuelta las primeras cinco columnas, pero lo más importante es que te da los nombres de las columnas. Y podemos ver que la primera columna es “date”, la segunda columna es “running_date”, la tercera columna es “month”, la cuarta es “year”, y la quinta es “CO2ppm”.

# También podemos acceder a filas y columnas específicas
# usando indexación con .iloc ()

# Veamos los datos nuevamente usando .head ()

data.head()
date running_date month year CO2ppm
0 8/13/17 1 aug 2017 405.2
1 8/14/17 2 aug 2017 405.2
2 8/15/17 3 aug 2017 405.2
3 8/16/17 4 aug 2017 405.2
4 8/17/17 5 aug 2017 405.2

Entonces, todo lo que necesita saber sobre “iloc” es que la primera posición son las filas, la segunda posición son las columnas, y puedes usar la indexación para filas y columnas.

Entonces, si solo usamos “data.iloc” y solo ingresamosun número, es la ranura de las filas. Recuerda, la indexación comienza en cero, por lo que esto debería devolvernos solo la primera fila de data.

Y tú puedes ver que esto es 13 de agosto de 2017, fecha de ejecución 1 , mes agosto, año 2017, y partes por millón 405.2, que es la primera fila de data. Entonces, las filas y luego el índice nos dan la primera fila de data.

# La primera posición en .iloc son las filas
# La segunda posición en .iloc son las columnas
# Usamos indexación y dos puntos start:end
# para hacer referencia a qué filas y columnas queremos

# La indexación comienza en 0, por lo que volvemos a la primera fila

data.iloc[0]
date            8/13/17
running_date          1
month               aug
year               2017
CO2ppm            405.2
Name: 0, dtype: object

Recuerda, uno negativo en la indexación es una forma de obtener el último elemento y, por lo tanto, si solo hacemos uno negativo de nuevo, posición de la fila, y volvemos a la última fila. Y puedes ver que es la última fila porque tiene la fecha de ejecución de 714.

# -1 con indexación es el último elemento
# devuelve la última fila

data.iloc[-1]
date            7/27/19
running_date        714
month               jul
year               2019
CO2ppm           410.87
Name: 713, dtype: object

Podemos hacer referencia a filas y columnas, por lo que podríamos decir la última fila, y recuerda, si solo ponemos dos puntos, que deberían tener el inicio y el final, pero no ponemos cualquier número, solo vamos a obtener todos los valores, por lo que esta será la última fila pero todas las columnas. Y de hecho eso es lo que obtenemos: la última fila, 714, pero todas las columnas, lo que equivale a poner un 1 negativo. Pero también funciona de esta manera porque formalmente hablando que queremos todas las columnas.

# Podemos hacer referencia a la última fila y a todas las columnas.

data.iloc[-1, :] # start:end, but : refers to all columns
date            7/27/19
running_date        714
month               jul
year               2019
CO2ppm           410.87
Name: 713, dtype: object

En este caso, con solo dos puntos vacíos para las filas, estamos diciendo que queremos todas las filas, pero solo queremos la primera columna, la columna de índice cero, recuerda que es la fecha, así que obtenemos todas las fechas porque pedimos todas las filas de solo la primera columna.

# Aquí ":" se refiere a todas las filas.
# para la primera columna referida con 0

data.iloc[:,0]
0      8/13/17
1      8/14/17
2      8/15/17
3      8/16/17
4      8/17/17
        ...   
709    7/23/19
710    7/24/19
711    7/25/19
712    7/26/19
713    7/27/19
Name: date, Length: 714, dtype: object

También podríamos obtener todas las filas para la segunda columna, recuerda que la segunda columna es la fecha de ejecución, por lo que es de uno a 714.

# También podríamos obtener todas las filas
# y la segunda columna, en el índice 1

data.iloc[:,1]
0        1
1        2
2        3
3        4
4        5
      ... 
709    710
710    711
711    712
712    713
713    714
Name: running_date, Length: 714, dtype: int64

Recuerda, puedes usar la indexación tanto para las filas como para las columnas. La indexación es inclusiva del inicio pero hasta el final y sin incluirlo. Entonces en este caso estamos diciendo que queremos las flas dos y tres porque vamos a subir pero sin incluir cuatro, así que estas son las filas dos y tres para columnas desde dos hasta el final, que sería la tercera columna hasta el final.

Como puedes ver obtenemos las filas dos y tres que incluyen el inicio también y sin incluir cuatro, las filas dos y tres, y obtenemos la segunda posición de índice de las columnas, que es la tercera columna hasta el final.

# La indexación se puede utilizar tanto 
# para las filas como para las columnas

data.iloc[2:4, 2:] # indexing inclusive of start but not the end
month year CO2ppm
2 aug 2017 405.2
3 aug 2017 405.2

Puedes usar corchetes separados por comas para obtener filasmuy específicas en columnas muy específicas. Y que si quisieras posiciones de índice 0, 3, 5 y 7 para filas y posiciones de columna 0, 2 y 4? Y luego puedes ver que eso es exactamente lo que obtenemos:las filas indexadas por esos números aleatorios y luego la primera, tercera y quinta columnas, porque recuerda que la indexación comienza en cero.

# Los corchetes entre corchetes se pueden utilizar 
# para hacer referencia a filas y columnas específicas

data.iloc[[0,3,5,7],[0,2,4]]
date month CO2ppm
0 8/13/17 aug 405.20
3 8/16/17 aug 405.20
5 8/18/17 aug 405.20
7 8/20/17 aug 404.54

Entonces, iloc es una forma muy específica de obtener datos muy específicos por fila o por columna.