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.
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.
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, meseMe annoY
## 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] |

