12  Operador Walrus

import pandas as pd
import matplotlib.pyplot as plt
funciones = ["pd.read_csv", "pd.concat", "pd.read_excel", "pd.read_parquet"]
# Supongamos que queremos filtrar solo los que tienen más de 11 letras 
resultados = []
for funcion in funciones:
    largo = len(funcion)
    if largo > 11:
        resultados.append(funcion)
print(resultados)
['pd.read_excel', 'pd.read_parquet']

Con el operador walrus

funciones = ["pd.read_csv", "pd.concat", "pd.read_excel", "pd.read_parquet"]
resultados = []
for funcion in funciones:
    if (largo := len(funcion)) > 11:
        resultados.append(funcion)
print(resultados)
['pd.read_excel', 'pd.read_parquet']

# Calcular el valor de una función y luego usarlo para alguna condición
valor =16**2
if valor > 3:
    print(f"El valor es mayor que 3 y es {valor}")
El valor es mayor que 3 y es 256
# Calcular el valor de una función y evaluarlo en la misma expresión
if (valor := 16**2) > 3:
    print(f"El valor es mayor que 3 y es {valor}")
El valor es mayor que 3 y es 256
f = "../../data/Temixco_2018_10Min.csv"
tmx = pd.read_csv(f,parse_dates=["time"])
tmx.time
0       2018-01-01 00:00:00
1       2018-01-01 00:10:00
2       2018-01-01 00:20:00
3       2018-01-01 00:30:00
4       2018-01-01 00:40:00
                ...        
52555   2018-12-31 23:10:00
52556   2018-12-31 23:20:00
52557   2018-12-31 23:30:00
52558   2018-12-31 23:40:00
52559   2018-12-31 23:50:00
Name: time, Length: 52560, dtype: datetime64[ns]
tmx["time"].apply(lambda x: x.year)
0        2018
1        2018
2        2018
3        2018
4        2018
         ... 
52555    2018
52556    2018
52557    2018
52558    2018
52559    2018
Name: time, Length: 52560, dtype: int64
tmx["year"] = tmx["time"].apply(lambda x: x.year)
tmx.columns
Index(['time', 'Ib', 'Ig', 'To', 'RH', 'WS', 'WD', 'P', 'year'], dtype='object')
%%timeit
tmx["P"].apply(lambda x: x*100)
19 ms ± 4.57 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
%%timeit
tmx["P"]*100
107 μs ± 8.46 μs per loop (mean ± std. dev. of 7 runs, 10,000 loops each)
tmx['mensaje'] = tmx['To'].apply(lambda x: 'confort' if 20 <= x <= 24 else ('calor' if x > 24 else 'frío'))
tmx.mensaje
0        frío
1        frío
2        frío
3        frío
4        frío
         ... 
52555    frío
52556    frío
52557    frío
52558    frío
52559    frío
Name: mensaje, Length: 52560, dtype: object
tmx.mensaje.value_counts()
mensaje
calor      20907
confort    15921
frío       15732
Name: count, dtype: int64