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.