Trasformazione dei dati anagrafici nei Panda con queste tre tecniche utili

Un tuffo nel filtraggio, nella manipolazione e nel funzionamento

Foto di Milad Fakurian on Unsplash

Ripensa all'ultima volta che hai lavorato con un set di dati ben formattato. Colonne con nomi ben definiti, valori mancanti minimi e organizzazione corretta. È una bella sensazione, quasi liberatoria, avere la fortuna di avere a disposizione dati che non è necessario pulire e trasformare.

Beh, è ​​bello finché non esci dal tuo sogno ad occhi aperti e riprendi ad armeggiare con il caos senza speranza di file spezzate ed etichette senza senso di fronte a te.

Non esistono dati puliti (nella loro forma originale). Se sei uno scienziato dei dati, lo sai. Se hai appena iniziato, dovresti accettarlo. Dovrai trasformare i tuoi dati per poterli utilizzare in modo efficace.

Parliamo di tre modi per farlo.

Filtraggio, ma spiegato correttamente

Parliamo di filtraggio, ma un po' più in profondità di quanto potresti essere abituato a fare. Essendo una delle operazioni di trasformazione dei dati più comuni e utili, il filtraggio efficace è una competenza indispensabile per qualsiasi data scientist. Se conosci i Panda, probabilmente è una delle prime operazioni che hai imparato a fare.

Rivediamo, utilizzando il mio esempio preferito e stranamente versatile: un DataFrame di voti degli studenti, giustamente chiamato grades:

Immagine per autore

Escluderemo tutti i punteggi inferiori a 90, perché oggi abbiamo deciso di essere educatori scarsamente formati che si rivolgono solo agli studenti migliori (per favore, non farlo mai). La riga di codice standard per eseguire questa operazione è la seguente:

voti[voti['Punteggio'] >= 90]
Immagine per autore

Questo ci lascia con Jack e Hermione. Freddo. Ma cosa è successo esattamente qui? Perché la riga di codice sopra funziona? Immergiamoci un po' più a fondo osservando l'output dell'espressione all'interno delle parentesi esterne sopra:

voti['Punteggio'] >= 90
Immagine per autore

Ah ok. Ciò ha senso. Sembra che questa riga di codice restituisca un oggetto della serie Pandas che contiene Boolean ( True / False ) valori determinati da cosa >= 90 restituito per ogni singola riga. Questo è il passaggio intermedio fondamentale. Successivamente, è questa serie di valori booleani che viene passata nelle parentesi esterne e filtra di conseguenza tutte le righe.

Per completezza, menzionerò anche che lo stesso comportamento può essere ottenuto utilizzando il file loc parola chiave:

voti.loc[voti['Punteggio'] >= 90]
Immagine per autore

Esistono diversi motivi per cui potremmo scegliere di utilizzare loc (uno dei quali è che in realtà ci consente di filtrare righe e colonne attraverso un'unica operazione), ma ciò apre le operazioni del vaso di Pandora dei panda che è meglio lasciare a un altro articolo.

Per ora, l'importante obiettivo di apprendimento è questo: quando filtriamo in Pandas, la sintassi confusa non è una sorta di strana magia. Dobbiamo semplicemente scomporlo nei suoi due passaggi componenti: 1) ottenere una serie booleana delle righe che soddisfano la nostra condizione e 2) utilizzare la serie per filtrare l'intero DataFrame.

Perché è utile, potresti chiedere? Bene, in generale, è probabile che si creino bug confusi se si utilizzano semplicemente le operazioni senza capire come funzionano effettivamente. Il filtraggio è un'operazione utile e incredibilmente comune e ora sai come funziona.

Andiamo avanti.

La bellezza delle funzioni Lambda

A volte, i tuoi dati richiedono trasformazioni che semplicemente non sono integrate nella funzionalità di Panda. Per quanto tu possa provare, nessuna quantità di pulizia di Stack Overflow o di esplorazione diligente della documentazione di Panda rivela una soluzione al tuo problema.

Inserisci le funzioni lambda: un'utile funzionalità linguistica che si integra perfettamente con Panda.

Come breve ripasso, ecco come funzionano i lambda:

>>> add_function = lambda x, y: x + y
>>> aggiungi_funzione(2, 3)
5

Le funzioni Lambda non sono diverse dalle funzioni normali, tranne per il fatto che hanno una sintassi più concisa:

  • Nome della funzione a sinistra del segno di uguale
  • I lambda parola chiave a destra del segno uguale (in modo simile a def parola chiave in una definizione di funzione Python tradizionale, questo fa sapere a Python che stiamo definendo una funzione).
  • Parametri dopo il lambda parola chiave, a sinistra dei due punti.
  • Restituisce il valore a destra dei due punti.

Ora applichiamo le funzioni lambda a una situazione realistica.

I set di dati hanno spesso le proprie peculiarità di formattazione, specifiche per le variazioni nell'immissione e nella raccolta dei dati. Di conseguenza, i dati con cui stai lavorando potrebbero presentare problemi stranamente specifici che devi affrontare. Ad esempio, considera il semplice set di dati riportato di seguito, che memorizza i nomi delle persone e i loro redditi. Chiamiamolo monies.

Immagine per autore

Ora, in qualità di Altezze Master Data di questa azienda, ci sono state fornite alcune informazioni top-secret: a tutti in questa azienda verrà dato un aumento del 10% più altri $ 1000. Questo è probabilmente un calcolo troppo specifico per trovare un metodo specifico, ma abbastanza semplice con una funzione lambda:

update_income = lambda num: num + (num * .10) + 1000

Quindi non dovremo fare altro che utilizzare questa funzione con i Panda apply funzione, che ci permette di applicare una funzione ad ogni elemento della Serie selezionata:

soldi['Nuovo reddito'] = soldi['Reddito'].apply(update_income)
soldi
Immagine per autore

E abbiamo finito! Un nuovo brillante DataFrame composto esattamente dalle informazioni di cui avevamo bisogno, il tutto in due righe di codice. Per renderlo ancora più conciso, avremmo potuto anche definire la funzione lambda al suo interno apply direttamente: un suggerimento interessante che vale la pena tenere a mente.

Manterrò il punto qui semplice.

I Lambda sono estremamente utili e quindi dovresti usarli. Godere!

Funzioni di manipolazione delle stringhe in serie

Nella sezione precedente abbiamo parlato della versatilità delle funzioni lambda e di tutte le cose interessanti che possono aiutarti a realizzare con i tuoi dati. Questo è eccellente, ma dovresti stare attento a non lasciarti trasportare. È incredibilmente comune rimanere così presi da un modo familiare di fare le cose da perdere le scorciatoie più semplici con cui Python ha benedetto i programmatori. Questo vale ovviamente non solo per le lambda, ma per il momento continueremo a farlo.

Ad esempio, diciamo che abbiamo chiamato il seguente DataFrame names che memorizza i nomi e i cognomi delle persone:

Immagine per autore

Ora, a causa dei limiti di spazio nel nostro database, decidiamo che invece di memorizzare l'intero cognome di una persona, è più efficiente memorizzare semplicemente l'iniziale del cognome. Dobbiamo quindi trasformare il 'Last Name' colonna di conseguenza. Con lambda, il nostro tentativo di farlo potrebbe assomigliare al seguente:

nomi['Cognome'] = nomi['Cognome'].apply(lambda s: s[:1])
nomi
Immagine per autore

Funziona chiaramente, ma è un po' macchinoso e quindi non così pitonico come potrebbe essere. Fortunatamente, vista la bellezza delle funzioni di manipolazione delle stringhe in Panda, esiste un altro modo più elegante (ai fini della prossima riga di codice, andiamo avanti e supponiamo di non aver già modificato la 'Last Name' colonna con il codice sopra):

nomi['Cognome'] = nomi['Cognome'].str[:1]
nomi
Immagine per autore

Ta-da! IL .str La proprietà di una serie Panda ci consente di unire ogni stringa della serie con un'operazione di stringa specificata, proprio come se stessimo lavorando con ciascuna stringa individualmente.

Ma aspetta, migliora. Da .str ci consente effettivamente di accedere alla normale funzionalità di una stringa attraverso la serie, possiamo anche applicare una serie di funzioni di stringa per elaborare rapidamente i nostri dati! Ad esempio, supponiamo di decidere di convertire entrambe le colonne in lettere minuscole. Il seguente codice fa il lavoro:

nomi['Nome'] = nomi['Nome'].str.lower()
nomi['Cognome'] = nomi['Cognome'].str.lower()
nomi
Immagine per autore

Molto più semplice che affrontare il fastidio di definire le proprie funzioni lambda e chiamare le funzioni stringa al suo interno. Non che non ami le lambda, ma ogni cosa ha il suo posto e la semplicità dovrebbe sempre avere la priorità in Python.

Ho trattato solo alcuni esempi qui, ma è a tua disposizione un'ampia raccolta di funzioni stringa [1].

Usateli liberamente. Sono eccellenti.

Considerazioni finali e riepilogo

Ecco un piccolo cheat sheet per la trasformazione dei dati per te:

  1. Filtra come intendi tu. Scopri cosa sta realmente succedendo in modo da sapere cosa stai facendo.
  2. Adoro le tue lambda. Possono aiutarti a manipolare i dati in modi sorprendenti.
  3. I panda adorano gli archi tanto quanto te. Ci sono molte funzionalità integrate: puoi anche usarle.

Ecco un ultimo consiglio: non esiste un modo “corretto” per filtrare un set di dati. Dipende dai dati a disposizione e dal problema unico che stai cercando di risolvere. Tuttavia, anche se non esiste un metodo prestabilito da seguire ogni volta, esiste un'utile raccolta di strumenti che vale la pena avere a disposizione. In questo articolo ne ho discusso tre.

Ti incoraggio ad uscire e trovarne altri.

Riferimenti

[1] https://www.aboutdatablog.com/post/10-most-useful-string-functions-in-pandas

Trasformazione dei dati principali nei Panda con queste tre tecniche utili Ripubblicato dalla fonte https://towardsdatascience.com/master-data-transformation-in-pandas-with-these-tre-useful-techniques-20699f03e51d?source=rss—-7f60cf5620c9— 4 tramite https://towardsdatascience.com/feed

<!–

->

Timestamp:

Di più da Consulenti Blockchain