3 errori silenziosi su Pandas di cui dovresti essere consapevole

3 errori silenziosi su Pandas da conoscere

E come possono causare guasti nascosti

Foto di Malik Earnest su Unsplash

“Gli errori del folle sono noti al mondo, ma non a se stesso. Gli errori del saggio sono noti a se stesso, ma non al mondo.” – Charles Caleb Colton

Non conoscere gli errori che commettiamo nella programmazione non ci rende necessariamente degli sciocchi. Tuttavia, può comportare conseguenze indesiderate.

Alcuni errori brillano come un diamante e possono essere riconosciuti da lontano. Anche se non li noti, i compilatori (o interpreti) ci informano su di essi sollevando degli errori.

D’altra parte, esistono degli errori “silenziosi” che sono difficili da notare ma hanno il potenziale di causare seri problemi.

Essi non comportano alcun errore ma fanno sì che la funzione o l’operazione esegua le cose in modo diverso da quello che pensi. Di conseguenza, l’output cambia senza che te ne accorga.

Impareremo tre di tali problemi.

Sei un analista dei dati che lavora in un’azienda di vendita al dettaglio. Ti è stato chiesto di analizzare i risultati di una serie di promozioni recentemente effettuate. Uno dei compiti di questa analisi è calcolare le quantità totali di vendite per ogni promozione e il totale complessivo.

Supponiamo che i dati delle promozioni siano memorizzati in un DataFrame che ha l’aspetto seguente (sicuramente non così piccolo nella vita reale):

DataFrame delle promozioni (immagine dell'autore)

Ecco il codice Pandas per creare questo DataFrame se desideri seguirlo e fare gli esempi da solo:

import pandas as pdpromotion = pd.DataFrame(    {        "promotion_code": ["A2", "A1", "A2", "B1", "A2", None, "A2", "B1", None, "A1"],        "sales_qty": [34, 32, 26, 71, 44, 27, 64, 33, 45, 90],        "price": [24.5, 33.1, 64.9, 52.0, 29.0, 47.5, 44.2, 25.0, 42.5, 30.0]    })

Calcolare la quantità totale di vendite per ogni codice promozionale è un gioco da ragazzi. Devi solo utilizzare la funzione groupby:

promotion.groupby("promotion_code").agg(…