4.4 Enmascaramiento¶
Cómo enmascarar datos (una declaración booleana para pescar los datos que desea, corchetes después de un marco de datos¶
Mira este video de 8:06 a 12:06
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=8, seconds=6).total_seconds())
end=int(timedelta(hours=0, minutes=12, seconds=6).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, hablaremos de algo llamado enmascaramiento. El enmascaramiento es muy importante y es una forma de encontrar datos específicos que cumplen un criterio y es una declaración booleana; recuerda, una declaración booleana es algo que solo se puede evaluar como Verdadero o Falso, para encontrar todos los datos en su marco de datos que sean verdaderos con respecto a la declaración booleana.
Así que esto es lo que hace el enmascaramiento: nos da datos específicos y, como dije, es muy simple, una máscara es solo una declaración booleana.
Entonces decimos que la máscara es igual a y luego tenemos una declaración booleana. Entonces, para los datos en la columna del mes, los meses, la declaración booleana es que es igual a agosto. Usamos un doble igual aquí porque recuerda, cuando usamos Python, puede tener menor o igual a, mayor o igual a, pero igual a igual es verdaderamente igual. Entonces, la declaración booleana es elmes de agosto, Verdadero o Falso, esa es la máscara, y estamos estableciendo esta declaración booleana igual a la máscara.
Entonces presionamos shift + enter y luego podemos ver qué es la máscara.
# ¿Cómo obtenemos datos específicos?
# ¿Qué pasa si queremos todos los puntos de datos solo del mes de agosto?
# ¡Creamos una máscara!
# Una máscara es una declaración booleana donde los datos que desea son TRUE
mask = data['month']=='aug'
Y lo que ves es la máscara, es que devuelve las filas del marco de datos que cumplen los criterios. Entonces, este es un marco de datos grande, por lo que comienza desde el principio luego se rompe y luego llega hasta elfinal. Si recuerdas, el mes de agosto fue el primer valor de data. Así que puedes ver que estasfechas de agosto, eran las que estaban en la parte superior de del marco de datos, se evalúan como Verdadero. Pero luego evalúan como Falso cuando el mes no es agosto.
# La máscara devuelve qué filas se evalúan como TRUE para la declaración booleana
mask
0 True
1 True
2 True
3 True
4 True
...
709 False
710 False
711 False
712 False
713 False
Name: month, Length: 714, dtype: bool
Podemos obtener todos los datos. Así que esto es todo lo que hace una máscara: está regresando para las filas que son Verdadero y Falso, pero si coloca la máscara dentro de los corchetes del marco de datos lo que obtienes es el marco de datos completo, esas filas del marco de datos que se evalúan como Verdadero.
Entonces, por ejemplo, aquí puedes ver lo que obtenemos son solo datos que son el mes de agosto. Estas fueron las únicas filas que cumplieron con la declaración booleana de ser Verdadero que eran agostos.
Así que eso es todo lo que es la máscara: recuerda que una máscara es solo una declaración booleana y ponemos la máscara entre paréntesis del marco de datos para devolver esas filas que se evalúan como Verdadero para la declaración booleana.
# Si colocamos la máscara dentro de los corchetes del marco de datos
# luego se devuelven las filas donde la declaración es True
data[mask]
date | running_date | month | year | CO2ppm | |
---|---|---|---|---|---|
0 | 8/13/17 | 1 | aug | 2017 | 405.20 |
1 | 8/14/17 | 2 | aug | 2017 | 405.20 |
2 | 8/15/17 | 3 | aug | 2017 | 405.20 |
3 | 8/16/17 | 4 | aug | 2017 | 405.20 |
4 | 8/17/17 | 5 | aug | 2017 | 405.20 |
5 | 8/18/17 | 6 | aug | 2017 | 405.20 |
6 | 8/19/17 | 7 | aug | 2017 | 405.20 |
7 | 8/20/17 | 8 | aug | 2017 | 404.54 |
8 | 8/21/17 | 9 | aug | 2017 | 404.54 |
9 | 8/22/17 | 10 | aug | 2017 | 404.54 |
10 | 8/23/17 | 11 | aug | 2017 | 404.54 |
11 | 8/24/17 | 12 | aug | 2017 | 404.54 |
12 | 8/25/17 | 13 | aug | 2017 | 404.54 |
13 | 8/26/17 | 14 | aug | 2017 | 404.54 |
14 | 8/27/17 | 15 | aug | 2017 | 404.23 |
15 | 8/28/17 | 16 | aug | 2017 | 404.23 |
16 | 8/29/17 | 17 | aug | 2017 | 404.23 |
17 | 8/30/17 | 18 | aug | 2017 | 404.23 |
18 | 8/31/17 | 19 | aug | 2017 | 404.23 |
353 | 8/1/18 | 354 | aug | 2018 | 407.46 |
354 | 8/2/18 | 355 | aug | 2018 | 407.46 |
355 | 8/3/18 | 356 | aug | 2018 | 407.46 |
356 | 8/4/18 | 357 | aug | 2018 | 407.46 |
357 | 8/5/18 | 358 | aug | 2018 | 407.23 |
358 | 8/6/18 | 359 | aug | 2018 | 407.23 |
359 | 8/7/18 | 360 | aug | 2018 | 407.23 |
360 | 8/8/18 | 361 | aug | 2018 | 407.23 |
361 | 8/9/18 | 362 | aug | 2018 | 407.23 |
362 | 8/10/18 | 363 | aug | 2018 | 407.23 |
363 | 8/11/18 | 364 | aug | 2018 | 407.23 |
364 | 8/12/18 | 365 | aug | 2018 | 407.07 |
365 | 8/13/18 | 366 | aug | 2018 | 407.07 |
366 | 8/14/18 | 367 | aug | 2018 | 407.07 |
367 | 8/15/18 | 368 | aug | 2018 | 407.07 |
368 | 8/16/18 | 369 | aug | 2018 | 407.07 |
369 | 8/17/18 | 370 | aug | 2018 | 407.07 |
370 | 8/18/18 | 371 | aug | 2018 | 407.07 |
371 | 8/19/18 | 372 | aug | 2018 | 406.84 |
372 | 8/20/18 | 373 | aug | 2018 | 406.84 |
373 | 8/21/18 | 374 | aug | 2018 | 406.84 |
374 | 8/22/18 | 375 | aug | 2018 | 406.84 |
375 | 8/23/18 | 376 | aug | 2018 | 406.84 |
376 | 8/24/18 | 377 | aug | 2018 | 406.84 |
377 | 8/25/18 | 378 | aug | 2018 | 406.84 |
378 | 8/26/18 | 379 | aug | 2018 | 406.26 |
379 | 8/27/18 | 380 | aug | 2018 | 406.26 |
380 | 8/28/18 | 381 | aug | 2018 | 406.26 |
381 | 8/29/18 | 382 | aug | 2018 | 406.26 |
382 | 8/30/18 | 383 | aug | 2018 | 406.26 |
383 | 8/31/18 | 384 | aug | 2018 | 406.26 |
Puedes utilizar esta técnica también con una columna. Por ejemplo, si dices que solo te interesan los valores de partes de CO2 por millón, te refieres a esa columna y los corchetes para obtenerla, pero tienes un segundo conjunto de corchetes con la máscara y cuando lo hagas solo habrás devuelto los valores de partes de CO2 por millón, ninguno del resto del marco de datos, porque especificaste esta columna específica.
# Podemos limitar lo que se devuelve haciendo referencia a una columna específica.
# y colocando la máscara en un soporte doble
data['CO2ppm'][mask]
0 405.20
1 405.20
2 405.20
3 405.20
4 405.20
5 405.20
6 405.20
7 404.54
8 404.54
9 404.54
10 404.54
11 404.54
12 404.54
13 404.54
14 404.23
15 404.23
16 404.23
17 404.23
18 404.23
353 407.46
354 407.46
355 407.46
356 407.46
357 407.23
358 407.23
359 407.23
360 407.23
361 407.23
362 407.23
363 407.23
364 407.07
365 407.07
366 407.07
367 407.07
368 407.07
369 407.07
370 407.07
371 406.84
372 406.84
373 406.84
374 406.84
375 406.84
376 406.84
377 406.84
378 406.26
379 406.26
380 406.26
381 406.26
382 406.26
383 406.26
Name: CO2ppm, dtype: float64
Por lo general, viste que creamos una máscara, y la llamamos máscara, y estábamos escribiendo fuera de la máscara en nuestro código. Pero generalmente la gente no hace eso. Lo hacen mucho más simple, donde simplemente escriben la máscara.
Esta es la declaración booleana aquí, que he resaltado. Y ellos simplemente colocan la máscara en una línea de código con los datos o la columna específica que desean. Esto es un poco complicado de ver, pero recuerda siempre ir primero a la máscara y estará en el segundo conjunto de corchetes o estará en el primer conjunto de corchetes y es solo una declaración booleana. Y devolverá las filas que son verdaderas para la declaración booleana. Y esta es una forma que obtiene los datos específicos que deseas.
# Por lo general, la máscara se escribe directamente en la línea de código.
# Mire siempre al segundo juego de corchetes para ver
# que es la mascara
data['CO2ppm'][data['month']=='aug']
0 405.20
1 405.20
2 405.20
3 405.20
4 405.20
5 405.20
6 405.20
7 404.54
8 404.54
9 404.54
10 404.54
11 404.54
12 404.54
13 404.54
14 404.23
15 404.23
16 404.23
17 404.23
18 404.23
353 407.46
354 407.46
355 407.46
356 407.46
357 407.23
358 407.23
359 407.23
360 407.23
361 407.23
362 407.23
363 407.23
364 407.07
365 407.07
366 407.07
367 407.07
368 407.07
369 407.07
370 407.07
371 406.84
372 406.84
373 406.84
374 406.84
375 406.84
376 406.84
377 406.84
378 406.26
379 406.26
380 406.26
381 406.26
382 406.26
383 406.26
Name: CO2ppm, dtype: float64