Python Tutorial di Pandas: DataFrame, intervallo di date e utilizzo

⚡ Riepilogo intelligente

Pandas è il progetto open-source Python Libreria per la manipolazione di dati tabellari. Fornisce le strutture Series e DataFrame, intervalli di date, funzioni di supporto per l'ispezione e le operazioni di slicing, drop, concatenazione, ordinamento e ridenominazione illustrate in questa guida.

  • 🔘 Basato su NumPy: Pandas richiede NumPy, che fornisce gli array alla base di ogni Series e DataFrame.
  • ☑️ Due sezioni: Una Series memorizza una dimensione etichettata; un DataFrame memorizza righe e colonne di tipi misti.
  • ✅ Intervalli di date: La funzione pd.date_range() crea un indice a partire da una data di inizio, un conteggio del periodo e una frequenza.
  • 🧪 Prima di tutto, ispezionate: Le funzioni head(), tail() e describe() rivelano la forma, la dispersione e i percentili prima di qualsiasi analisi.
  • ️ Tagliare con precisione: I nomi delle parentesi selezionano le colonne, loc seleziona per etichetta e iloc seleziona per posizione.
  • ⚠️ Nota sulla versione: L'alias di frequenza M è deprecato a partire da Pandas 2.2; le versioni attuali prevedono ME.

Python Tutorial su Pandas: DataFrame, intervalli di date e utilizzo di Pandas

Che cosa sono i panda in Python?

Pandas è una libreria open-source che consente di eseguire la manipolazione e l'analisi dei dati in Python, coprendo tabelle numeriche e serie temporali. Fornisce un modo semplice per creare, manipolare e organizzare i dati ed è costruito su NumPyPertanto, NumPy deve essere presente affinché Pandas funzioni.

Perché usare i Panda?

I data scientist utilizzano i Panda in Python per i seguenti vantaggi:

  • Gestisce facilmente i dati mancanti
  • Utilizza Series per i dati unidimensionali e DataFrame per i dati multidimensionali.
  • Fornisce un modo efficiente per suddividere i dati
  • Fornisce un modo flessibile per unire, concatenare o rimodellare i dati
  • Include un potente set di strumenti per l'analisi delle serie temporali.

In breve, Pandas fornisce strutture dati potenti e facili da usare, oltre ai mezzi per operare rapidamente su di esse, motivo per cui è alla base della maggior parte delle applicazioni. Python analisi dei dati lavoro.

Come installare Pandas

Pandas viene fornito con Anaconda e con la maggior parte dei servizi di notebook gestiti, quindi di solito è già installato. Se l'importazione fallisce, uno dei comandi seguenti lo aggiunge. L'ambiente integrato in Come installare TensorFlow contiene anche Pandas.

  • pipì: pip install pandas
  • Anaconda: conda install -c anaconda pandas
  • Dentro a Jupyter Taccuino cella:
import sys
!conda install --yes --prefix {sys.prefix} pandas

Cos'è un DataFrame Panda?

Un DataFrame di Pandas è una struttura dati bidimensionale etichettata le cui colonne possono contenere diversi tipi. È il modo standard per memorizzare i dati in formato tabellare: le righe contengono le osservazioni e le colonne denominano le informazioni. Ad esempio, prezzo può essere il nome di una colonna e 2, 3, 4 possono essere i valori del prezzo.

I data frame sono ben noti agli statistici e ad altri professionisti dei dati. L'immagine qui sotto mostra questa struttura: un indice di riga etichettato sul lato e colonne nominate nella parte superiore.

Struttura di un DataFrame di Pandas con indice di riga etichettato e colonne denominate.

Cos'è una serie?

Una Series è una struttura dati unidimensionale. Può contenere qualsiasi tipo di dato, come numeri interi, numeri in virgola mobile o stringhe, ed è utile quando si desidera eseguire un calcolo o restituire un array unidimensionale. Una Series, per definizione, non può avere più colonne; in tal caso, utilizzare la struttura DataFrame.

Il costruttore della serie Pandas accetta i seguenti parametri:

  • Data: può essere un elenco, un dizionario o un valore scalare
pd.Series([1., 2., 3.])
0    1.0
1    2.0
2    3.0
dtype: float64

È possibile aggiungere un indice con indexSpecifica i nomi delle righe e la sua lunghezza deve essere uguale alla dimensione della colonna.

pd.Series([1., 2., 3.], index=['a', 'b', 'c'])

Di seguito crei una serie Pandas con un valore mancante nella terza riga. Valori mancanti in Python sono mostrati come NaNe np.nan da NumPy ne crea uno artificialmente.

pd.Series([1,2,np.nan])

Uscita

0    1.0
1    2.0
2    NaN
dtype: float64

Crea Panda DataFrame

È possibile convertire un array NumPy in un DataFrame con pd.DataFrame()È possibile anche il contrario: per convertire un DataFrame di nuovo in un array, utilizzare np.array(), o df.to_numpy(), come raccomandato dalla documentazione attuale di Pandas.

## Numpy to pandas
import numpy as np
h = [[1,2],[3,4]] 
df_h = pd.DataFrame(h)
print('Data Frame:', df_h)

## Pandas to numpy
df_h_n = np.array(df_h)
print('Numpy array:', df_h_n)
Data Frame:    0  1
0  1  2
1  3  4
Numpy array: [[1 2]
 [3 4]]

Un dizionario funziona altrettanto bene come input per pd.DataFrame().

dic = {'Name': ["John", "Smith"], 'Age': [30, 40]}
pd.DataFrame(data=dic)
Età Nome
0 30 John
1 40 fabbro

Dati sulla gamma dei panda

Pandas offre una comoda API per creare un intervallo di date, che diventa l'indice di una serie temporale. La chiamata ha questa forma:

pd.date_range(start, periods, freq):

  • Il primo parametro è la data di inizio
  • Il secondo parametro è il numero di periodi (facoltativo se è specificata la data di fine)
  • L'ultimo parametro è la frequenza: giorno D, mese M e anno Y
## Create date
# Days
dates_d = pd.date_range('20300101', periods=6, freq='D')
print('Day:', dates_d)

Uscita

Day: DatetimeIndex(['2030-01-01', '2030-01-02', '2030-01-03', '2030-01-04', '2030-01-05', '2030-01-06'], dtype='datetime64[ns]', freq='D')
# Months
dates_m = pd.date_range('20300101', periods=6, freq='M')
print('Month:', dates_m)

Uscita

Month: DatetimeIndex(['2030-01-31', '2030-02-28', '2030-03-31', '2030-04-30','2030-05-31', '2030-06-30'], dtype='datetime64[ns]', freq='M')

Nota sulla versione: l'alias del mese M La sintassi utilizzata sopra è deprecata da Pandas 2.2 e rimossa in Pandas 3.0. Nelle versioni attuali passare freq='ME' per la fine del mese; l'indice risultante è identico.

Ispezione dei dati

È possibile controllare la testa o la coda di un dataset con head() or tail() chiamata sul DataFrame, come mostrato nell'esempio di Pandas qui sotto.

Passo 1) Crea una sequenza casuale con NumPy. La sequenza ha 4 colonne e 6 righe.

random = np.random.randn(6,4)

Passo 2) Successivamente, si crea un DataFrame utilizzando Pandas.

Usa il dates_m come indice, quindi a ogni riga viene assegnato un nome corrispondente a una data e vengono nominate le 4 colonne con il nome columns discussione.

# Create data with date
df = pd.DataFrame(random,
                  index=dates_m,
                  columns=list('ABCD'))

Perché np.random.randn() Se non si utilizza un seme, i risultati saranno diversi da quelli stampati qui. Chiamare np.random.seed(0) Innanzitutto, se si desidera riprodurre un set fisso.

Passo 3) Utilizzo della funzione testa

df.head(3)
A B C D
2030-01-31 1.139433 1.318510 all'0.181334 ottobre 1.615822
2030-02-28 all'0.081995 ottobre all'0.063582 ottobre 0.857751 all'0.527374 ottobre
2030-03-31 all'0.519179 ottobre 0.080984 all'1.454334 ottobre 1.314947

Passo 4) Utilizzo della funzione coda

df.tail(3)
A B C D
2030-04-30 all'0.685448 ottobre all'0.011736 ottobre 0.622172 0.104993
2030-05-31 all'0.935888 ottobre all'0.731787 ottobre all'0.558729 ottobre 0.768774
2030-06-30 1.096981 0.949180 all'0.196901 ottobre all'0.471556 ottobre

Passo 5) Un ottimo modo per farsi un'idea dei dati è describe()Riporta il conteggio, la media, la deviazione standard, il minimo, il massimo e i percentili del set di dati.

df.describe()
A B C D
contare 6.000000 6.000000 6.000000 6.000000
significare 0.002317 0.256928 all'0.151896 ottobre 0.467601
std 0.908145 0.746939 0.834664 0.908910
min all'0.935888 ottobre all'0.731787 ottobre all'1.454334 ottobre all'0.527374 ottobre
25% all'0.643880 ottobre all'0.050621 ottobre all'0.468272 ottobre all'0.327419 ottobre
50% all'0.300587 ottobre 0.034624 all'0.189118 ottobre 0.436883
75% 0.802237 0.732131 0.421296 1.178404
max 1.139433 1.318510 0.857751 1.615822

Suddividere i dati

Lo slicing estrae un sottoinsieme di righe o colonne da un DataFrame. È possibile utilizzare il nome della colonna per esportaretracsu una colonna, come mostra l'esempio di Pandas qui sotto.

## Slice
### Using name
df['A']

2030-01-31   -0.168655
2030-02-28    0.689585
2030-03-31    0.767534
2030-04-30    0.557299
2030-05-31   -1.547836
2030-06-30    0.511551
Freq: M, Name: A, dtype: float64

Per selezionare più colonne è necessario utilizzare una doppia parentesi, [[..,..]]La prima coppia indica che si desidera selezionare le colonne; la seconda coppia specifica quali colonne visualizzare.

df[['A', 'B']]
A B
2030-01-31 all'0.168655 ottobre 0.587590
2030-02-28 0.689585 0.998266
2030-03-31 0.767534 all'0.940617 ottobre
2030-04-30 0.557299 0.507350
2030-05-31 all'1.547836 ottobre 1.276558
2030-06-30 0.511551 1.572085

È possibile separare le righe utilizzando i due punti. Il codice seguente restituisce le prime tre righe.

### using a slice for row
df[0:3]
A B C D
2030-01-31 all'0.168655 ottobre 0.587590 0.572301 all'0.031827 ottobre
2030-02-28 0.689585 0.998266 1.164690 0.475975
2030-03-31 0.767534 all'0.940617 ottobre 0.227255 all'0.341532 ottobre

Migliori loc La funzione di accesso seleziona le colonne in base al nome. Come di consueto, il valore prima della virgola rappresenta le righe e il valore dopo le colonne; le parentesi quadre sono necessarie per selezionare più di una colonna.

## Multi col
df.loc[:,['A','B']]
A B
2030-01-31 all'0.168655 ottobre 0.587590
2030-02-28 0.689585 0.998266
2030-03-31 0.767534 all'0.940617 ottobre
2030-04-30 0.557299 0.507350
2030-05-31 all'1.547836 ottobre 1.276558
2030-06-30 0.511551 1.572085

Esiste un altro metodo per selezionare più righe e colonne. iloc[] utilizza posizioni intere anziché nomi di colonna, quindi il codice seguente restituisce lo stesso DataFrame di quello precedente.

df.iloc[:, :2]
A B
2030-01-31 all'0.168655 ottobre 0.587590
2030-02-28 0.689585 0.998266
2030-03-31 0.767534 all'0.940617 ottobre
2030-04-30 0.557299 0.507350
2030-05-31 all'1.547836 ottobre 1.276558
2030-06-30 0.511551 1.572085

Rilascia una colonna

È possibile eliminare le colonne con df.drop(), passando i nomi nel columns discussione.

df.drop(columns=['A', 'C'])
B D
2030-01-31 0.587590 all'0.031827 ottobre
2030-02-28 0.998266 0.475975
2030-03-31 all'0.940617 ottobre all'0.341532 ottobre
2030-04-30 0.507350 all'0.296035 ottobre
2030-05-31 1.276558 0.523017
2030-06-30 1.572085 all'0.594772 ottobre

Concatenazione

È possibile concatenare due DataFrame con pd.concat(). Per prima cosa, crea le due cornici.

import numpy as np
df1 = pd.DataFrame({'name': ['John', 'Smith','Paul'],
                     'Age': ['25', '30', '50']},
                    index=[0, 1, 2])
df2 = pd.DataFrame({'name': ['Adam', 'Smith' ],
                     'Age': ['26', '11']},
                    index=[3, 4])  

Quindi uniscili.

df_concat = pd.concat([df1,df2]) 
df_concat
Età Nome
0 25 John
1 30 fabbro
2 50 Paul
3 26 Adam
4 11 fabbro

Elimina i duplicati

Quando un set di dati contiene informazioni duplicate, drop_duplicates() è un modo semplice per escludere le righe ripetute. df_concat contiene un'osservazione duplicata: Smith appare due volte nel name colonna.

df_concat.drop_duplicates('name')
Età Nome
0 25 John
1 30 fabbro
2 50 Paul
3 26 Adam

Ordina i valori

È possibile ordinare una cornice con sort_values(). Nota che Age è stato creato come testo qui, quindi le righe vengono ordinate in base all'ordine delle stringhe.

df_concat.sort_values('Age')
Età Nome
4 11 fabbro
0 25 John
3 26 Adam
1 30 fabbro
2 50 Paul

Rinomina colonne

Usa il rename() Per rinominare una colonna in Pandas. In ogni coppia, il primo valore è il nome corrente della colonna e il secondo è il nuovo nome.

df_concat.rename(columns={"name": "Surname", "Age": "Age_ppl"})
Età_ppl Cognome
0 25 John
1 30 fabbro
2 50 Paul
3 26 Adam
4 11 fabbro

Guida rapida ai metodi di Pandas

Questa tabella associa ogni attività comune al metodo Pandas che la esegue.

Task Metodo
importare dati leggi_csv
creare serie Campionati
Crea frame di dati dataframe
Crea intervallo di date DATE_RANGE
testa di ritorno capo
coda di ritorno coda
Descrivere descrivere
affettare utilizzando il nome nomedati['nomecolonna']
Tagliare utilizzando le righe nome_dati[0:5]

DOMANDE FREQUENTI

Bando pd.read_csv() con un percorso o URLAggiungi nomi alle etichette delle colonne, usa `sep` per un delimitatore diverso e `usecols` per mantenere solo le colonne necessarie.

La funzione isnull() li contrassegna, dropna() rimuove le righe o le colonne interessate e fillna() li sostituisce con una costante o una statistica, come ad esempio la media della colonna. Le voci mancanti vengono visualizzate come NaN.

La funzione groupby() suddivide le righe in gruppi in base a una colonna chiave, applica un'aggregazione come conteggio, somma o media a ciascun gruppo, quindi combina i risultati in un nuovo frame.

Costruisci una maschera booleana e passala tra parentesi, ad esempio df[df.Age == 30]. Combina le maschere con gli operatori e commerciale e pipe, avvolgiping ciascun confronto tra parentesi.

pd.merge() abbina le righe su una colonna chiave nel modo in cui SQL join esegue l'operazione, con la possibilità di impostare la posizione su inner, left, right o outer. concat() impila i frame invece di abbinare le chiavi.

df.to_csv('out.csv', index=False) scrive un file in formato .csv, e df.to_excel('out.xlsx') scrive un foglio di lavoro.ping L'indice evita che la prima colonna, alla successiva lettura, rimanga senza nome.

Gli assistenti IA profilano un nuovo frame, suggeriscono le chiamate describe, groupby e plot da eseguire e segnalano le colonne con tipi di dati insoliti o molti valori nulli. Conferma ogni suggerimento confrontandolo con i dati grezzi.

Sì. Le serrature scorrevoli portatili e i catenacci a superficie possono essere usati per mettere in sicurezza una porta a scomparsa dall'esterno. Alcuni kit con catena di sicurezza consentono anche il bloccaggio esterno con chiave o manopola girevole. Copilota GitHub completa un semplice commento nel codice Pandas funzionante in un Jupyter cella. RevPrima di considerare valido il risultato, controlla i tipi di dati e il numero di righe.

Riassumi questo post con: