HOWTO · Pandas
Converti Pandas Series in DataFrame
Introduce come convertire le serie di pandas in dataframe
In questa pagina
Usa pandas.DataFrame() o pandas.Series.to_frame() per convertire una Series Pandas in un DataFrame. Entrambi i metodi mantengono l’indice della Series come indice delle righe del DataFrame. Usa to_frame(name=...) per assegnare un nome alla colonna dei valori; usa reset_index(name=...) quando vuoi trasformare il vecchio indice in una normale colonna. Per combinare più Series come colonne, usa pd.concat(..., axis=1).
Gli esempi usano questa Series, le cui etichette diventano l’indice delle righe in ogni conversione:
import pandas as pd
import numpy as np
np.random.seed(0)
df_series = pd.Series(
np.random.randint(0, 100, size=(10)),
index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
)
print(df_series)
a 44
b 47
c 64
d 67
e 67
f 9
g 83
h 21
i 36
j 87
dtype: int64
Convertire una singola Series Pandas in DataFrame con pandas.DataFrame()
Passa una Series a pandas.DataFrame() per creare un DataFrame con una sola colonna. L’argomento columns imposta l’etichetta della colonna dei valori; l’indice della Series resta l’indice delle righe. Questo costruttore generico è utile quando stai già creando un DataFrame a partire da altri dati.
import pandas as pd
import numpy as np
np.random.seed(0)
df_series = pd.Series(
np.random.randint(0, 100, size=(10)),
index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
)
print(pd.DataFrame(df_series, columns=["A"]))
A
a 44
b 47
c 64
d 67
e 67
f 9
g 83
h 21
i 36
j 87
Il DataFrame risultante ha una colonna chiamata A e conserva le etichette da a a j come indice.
Usa il costruttore quando l’input è già una Series e vuoi specificare le opzioni del DataFrame al momento della creazione. La lista columns determina l’etichetta della colonna di output, ma non sostituisce l’indice della Series. Se ometti columns, pandas usa il nome della Series per la colonna dei valori, se presente; in caso contrario, usa 0.
Convertire una singola Series Pandas in DataFrame con pandas.Series.to_frame()
Chiama Series.to_frame() per convertire direttamente una Series in un DataFrame con una sola colonna. Passa name per scegliere l’etichetta della colonna dei valori. Il metodo mantiene l’indice della Series, utile quando le etichette identificano le righe.
Per una singola Series, to_frame(name="A") è un’alternativa concisa a pandas.DataFrame(series, columns=["A"]). Scegli un nome che descriva i valori, soprattutto se intendi unire questo DataFrame ad altre tabelle. Queste conversioni non trasformano l’indice della Series in una colonna di dati; per ottenere quella struttura, usa reset_index().
import pandas as pd
import numpy as np
np.random.seed(0)
df_series = pd.Series(
np.random.randint(0, 100, size=(10)),
index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
)
print(df_series.to_frame(name="A"))
A
a 44
b 47
c 64
d 67
e 67
f 9
g 83
h 21
i 36
j 87
Se una Series non ha un nome, to_frame() usa 0 come etichetta della colonna dei valori. Se vuoi anche inserire l’indice della Series in una colonna come dato, usa il metodo reset_index(). Assegnando un nome all’asse dell’indice, la prima colonna di output si chiamerà index:
import pandas as pd
import numpy as np
np.random.seed(0)
df_series = pd.Series(
np.random.randint(0, 100, size=(10)),
index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
).rename_axis("index")
print(df_series)
print("\n")
print(df_series.reset_index())
index
a 44
b 47
c 64
d 67
e 67
f 9
g 83
h 21
i 36
j 87
dtype: int64
index 0
0 a 44
1 b 47
2 c 64
3 d 67
4 e 67
5 f 9
6 g 83
7 h 21
8 i 36
9 j 87
reset_index() restituisce un DataFrame con l’indice precedente nella colonna index e i valori della Series in una colonna chiamata 0. Passa name per assegnare direttamente un’etichetta alla colonna dei valori:
import pandas as pd
import numpy as np
np.random.seed(0)
df_series = pd.Series(
np.random.randint(0, 100, size=(10)),
index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
).rename_axis("index")
print(df_series)
print("\n")
print(df_series.reset_index(name="A"))
index
a 44
b 47
c 64
d 67
e 67
f 9
g 83
h 21
i 36
j 87
dtype: int64
index A
0 a 44
1 b 47
2 c 64
3 d 67
4 e 67
5 f 9
6 g 83
7 h 21
8 i 36
9 j 87
Convertire più Series Pandas in un DataFrame
Per disporre più Series affiancate in un unico DataFrame, passale a pd.concat() con axis=1. Pandas allinea i valori in base alle etichette dell’indice, quindi le etichette corrispondenti condividono la stessa riga. Le Series seguenti hanno lo stesso indice e producono tre colonne di valori:
import pandas as pd
import numpy as np
np.random.seed(0)
df_series1 = pd.Series(
np.random.randint(0, 100, size=(10)),
index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
)
df_series2 = pd.Series(
np.random.randint(40, 100, size=(10)),
index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
)
df_series3 = pd.Series(
np.random.randint(80, 100, size=(10)),
index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
)
df_stitched = pd.concat([df_series1, df_series2, df_series3], axis=1)
print(df_stitched)
0 1 2
a 44 46 97
b 47 64 85
c 64 64 93
d 67 52 88
e 67 98 89
f 9 41 99
g 83 78 96
h 21 79 99
i 36 63 85
j 87 86 95
La funzione pd.concat() usa axis=1 per concatenare lungo le colonne. Il valore predefinito è axis=0, che concatena invece lungo le righe. Se gli indici differiscono, la concatenazione per colonne allinea i valori in base alle etichette; le etichette assenti in una Series corrispondono a valori mancanti in quella colonna.