Risposte:
Penso che concat
sia un bel modo per farlo. Se presenti, utilizza gli attributi del nome della serie come colonne (altrimenti li numera semplicemente):
In [1]: s1 = pd.Series([1, 2], index=['A', 'B'], name='s1')
In [2]: s2 = pd.Series([3, 4], index=['A', 'B'], name='s2')
In [3]: pd.concat([s1, s2], axis=1)
Out[3]:
s1 s2
A 1 3
B 2 4
In [4]: pd.concat([s1, s2], axis=1).reset_index()
Out[4]:
index s1 s2
0 A 1 3
1 B 2 4
Nota: questo si estende a più di 2 serie.
pd.concat([list_of_dataframes])
rispetto alla concation molte volte new_df = pd.DataFrame(); for df in list_of_dsf: new_df = pd.concat([new_df, df])
o simili.
Perché non usi semplicemente .to_frame se entrambi hanno gli stessi indici?
> = v0.23
a.to_frame().join(b)
< v0.23
a.to_frame().join(b.to_frame())
I panda allineeranno automaticamente questi passaggi in serie e creeranno l'indice congiunto. Qui capita di essere lo stesso. reset_index
sposta l'indice in una colonna.
In [2]: s1 = Series(randn(5),index=[1,2,4,5,6])
In [4]: s2 = Series(randn(5),index=[1,2,4,5,6])
In [8]: DataFrame(dict(s1 = s1, s2 = s2)).reset_index()
Out[8]:
index s1 s2
0 1 -0.176143 0.128635
1 2 -1.286470 0.908497
2 4 -0.995881 0.528050
3 5 0.402241 0.458870
4 6 0.380457 0.072251
Codice di esempio:
a = pd.Series([1,2,3,4], index=[7,2,8,9])
b = pd.Series([5,6,7,8], index=[7,2,8,9])
data = pd.DataFrame({'a': a,'b':b, 'idx_col':a.index})
Panda consente di creare un DataFrame
da a dict
con Series
i valori e i nomi delle colonne come chiavi. Quando trova un Series
valore, utilizza l' Series
indice come parte DataFrame
dell'indice. Questo allineamento dei dati è uno dei principali vantaggi di Panda. Di conseguenza, a meno che tu non abbia altre esigenze, il valore appena creato DataFrame
ha un valore duplicato. Nell'esempio sopra, data['idx_col']
ha gli stessi dati di data.index
.
Se potessi rispondere a questa domanda.
I fondamenti dietro la conversione delle serie in un data frame è quello di capirlo
1. A livello concettuale, ogni colonna nel frame di dati è una serie.
2. Inoltre, ogni nome di colonna è un nome chiave associato a una serie.
Se tieni a mente due concetti sopra, puoi pensare a molti modi per convertire le serie in frame di dati. Una soluzione semplice sarà così:
Crea due serie qui
import pandas as pd
series_1 = pd.Series(list(range(10)))
series_2 = pd.Series(list(range(20,30)))
Crea un frame di dati vuoto con solo i nomi di colonna desiderati
df = pd.DataFrame(columns = ['Column_name#1', 'Column_name#1'])
Inserisci il valore della serie nel frame di dati usando il concetto di mapping
df['Column_name#1'] = series_1
df['Column_name#2'] = series_2
Controlla i risultati ora
df.head(5)
Non sono sicuro di aver compreso appieno la tua domanda, ma è questo ciò che vuoi fare?
pd.DataFrame(data=dict(s1=s1, s2=s2), index=s1.index)
( index=s1.index
non è nemmeno necessario qui)
Una semplificazione della soluzione basata su join()
:
df = a.to_frame().join(b)
Ho usato i panda per convertire il mio array numpy o iseries in un frame di dati, quindi ho aggiunto e aggiunto la colonna aggiuntiva per chiave come 'previsione'. Se è necessario riconvertire i frame di dati in un elenco, utilizzare valori.tolist ()
output=pd.DataFrame(X_test)
output['prediction']=y_pred
list=output.values.tolist()