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