2014-09-29 16 views
23

ho una serie di Pandas sf:pitone, modo migliore per convertire una serie panda in una dataframe panda

email 
[email protected] [1.0, 0.0, 0.0] 
[email protected] [2.0, 0.0, 0.0] 
[email protected] [1.0, 0.0, 0.0] 
[email protected] [4.0, 0.0, 0.0] 
[email protected] [1.0, 0.0, 3.0] 
[email protected] [1.0, 5.0, 0.0] 

E vorrei trasformarlo al seguente dataframe:

index | email    | list 
_____________________________________________ 
0  | [email protected] | [1.0, 0.0, 0.0] 
1  | [email protected] | [2.0, 0.0, 0.0] 
2  | [email protected] | [1.0, 0.0, 0.0] 
3  | [email protected] | [4.0, 0.0, 0.0] 
4  | [email protected] | [1.0, 0.0, 3.0] 
5  | [email protected] | [1.0, 5.0, 0.0] 

I trovato un modo per farlo, ma dubito che sia il più efficiente uno:

df1 = pd.DataFrame(data=sf.index, columns=['email']) 
df2 = pd.DataFrame(data=sf.values, columns=['list']) 
df = pd.merge(df1, df2, left_index=True, right_index=True) 
+1

Come dire 'pd.DataFrame ({'email': sf.index, 'lista': sf.values})'? – EdChum

+0

funziona, grazie @EdChum – woshitom

+0

Devo postare come risposta? – EdChum

risposta

48

Anziché creare 2 DFS temporanei si può semplicemente passare questi come params all'interno di un dict utilizzando il costruttore dataframe:

pd.DataFrame({'email':sf.index, 'list':sf.values}) 

Ci sono molti modi per costruire un df, vedere la to_frame docs

+0

un'altra grande opzione è concat se le serie hanno gli stessi assi 'pd.concat ([sf.index, sf.values], axis = 1)' – Lauren

20

():

partire con la seguente serie , df:

email 
[email protected] A 
[email protected] B 
[email protected] C 
dtype: int64 

io uso to_frame a convertire la serie dataframe:

df = df.to_frame().reset_index() 

    email    0 
0 [email protected] A 
1 [email protected] B 
2 [email protected] C 
3 [email protected] D 

Ora tutto ciò che serve è quello di rinominare il nome della colonna e il nome della colonna di indice:

df = df.rename(columns= {0: 'list'}) 
df.index.name = 'index' 

tuo dataframe è pronto per ulteriori analisi.

Aggiornamento: ho appena trovato this link dove le risposte sono sorprendentemente simili alle mie qui.

+1

'series_obj.to_frame()' funziona! Emetto questo tipo di classe '' –

Problemi correlati