2015-10-13 10 views
6

Ho alcuni dati che sto cercando di organizzare in un DataFrame in Pandas. Stavo cercando di rendere ogni riga un Series e aggiungerlo allo DataFrame. Ho trovato un modo per farlo aggiungendo il Series a un vuoto list e quindi convertire il list di Series ad un DataFrameÈ possibile aggiungere serie alle righe di DataFrame senza prima creare un elenco?

esempio DF = DataFrame([series1,series2],columns=series1.index)

Questo passaggio da list a DataFrame sembra eccessivo. Ho esaminato alcuni esempi qui ma nessuno dello Series ha conservato le etichette Index dallo Series per utilizzarle come etichette di colonne.

mio lungo cammino in cui le colonne sono id_names e righe sono type_names: enter image description here

è possibile accodare serie di file di dataframe senza fare un primo elenco?

#!/usr/bin/python 

DF = DataFrame() 
for sample,data in D_sample_data.items(): 
    SR_row = pd.Series(data.D_key_value) 
    DF.append(SR_row) 
DF.head() 

TypeError: Can only append a Series if ignore_index=True or if the Series has a name 

Poi ho provato

DF = DataFrame() 
for sample,data in D_sample_data.items(): 
    SR_row = pd.Series(data.D_key_value,name=sample) 
    DF.append(SR_row) 
DF.head() 

Vuoto dataframe

provato Insert a row to pandas dataframe Ancora ottenere un dataframe vuoto:/

Sto cercando di ottenere la serie ad essere le righe , dove l'indice della serie diventa le etichette delle colonne di DataFrame

+0

Sto cercando di aggiungere righe. L'indice della serie dovrebbe essere le colonne di DataFrame. Quindi le righe sarebbero campioni e le colonne sarebbero caratteristiche. –

+0

Hai provato ad aggiungere un nome alla serie, come suggerisce il messaggio di errore? – BrenBarn

+0

È necessario leggere il messaggio di errore. Ti dice di aggiungere un nome alla serie, o di usare 'ignore_index = True'. Se fai una di queste cose, funziona bene. – BrenBarn

risposta

19

Forse un modo più semplice sarebbe aggiungere pandas.Series nello pandas.DataFrame con argomento ignore_index=True a DataFrame.append(). Esempio -

DF = DataFrame() 
for sample,data in D_sample_data.items(): 
    SR_row = pd.Series(data.D_key_value) 
    DF = DF.append(SR_row,ignore_index=True) 

Demo -

In [1]: import pandas as pd 

In [2]: df = pd.DataFrame([[1,2],[3,4]],columns=['A','B']) 

In [3]: df 
Out[3]: 
    A B 
0 1 2 
1 3 4 

In [5]: s = pd.Series([5,6],index=['A','B']) 

In [6]: s 
Out[6]: 
A 5 
B 6 
dtype: int64 

In [36]: df.append(s,ignore_index=True) 
Out[36]: 
    A B 
0 1 2 
1 3 4 
2 5 6 

Un altro problema nel codice è che DataFrame.append() non è sul posto, restituisce l'dataframe aggiunto, si avrebbe bisogno di assegnarlo di nuovo al vostro dataframe originale per farlo funzionare. Esempio -

DF = DF.append(SR_row,ignore_index=True) 

Per conservare le etichette, è possibile utilizzare la soluzione per includere il nome per la serie con l'assegnazione del dataframe aggiunto di nuovo a DF. Esempio -

DF = DataFrame() 
for sample,data in D_sample_data.items(): 
    SR_row = pd.Series(data.D_key_value,name=sample) 
    DF = DF.append(SR_row) 
DF.head() 
+0

Ho visto che sul link "Inserisci una riga per pandas dataframe" sopra. Sto cercando di scherzare. Forse c'è qualcosa che non sto facendo correttamente. –

+3

Ah amico, grazie! Non ho preso il DF = DF.append() Questo è molto diverso da quello della lista. Mi dispiace, mi sono perso. –

+0

Ho perso le etichette dell'indice. C'è un modo per preservare questo? –

7

DataFrame.append non modifica il DataFrame in posizione. È necessario eseguire df = df.append(...) se si desidera riassegnarlo alla variabile originale.

1

Qualcosa di simile potrebbe funzionare ...

mydf.loc['newindex'] = myseries 

Ecco un esempio in cui l'ho usato ...

stats = df[['bp_prob', 'ICD9_prob', 'meds_prob', 'regex_prob']].describe() 

stats 
Out[32]: 
      bp_prob ICD9_prob meds_prob regex_prob 
count 171.000000 171.000000 171.000000 171.000000 
mean  0.179946 0.059071 0.067020 0.126812 
std  0.271546 0.142681 0.152560 0.207014 
min  0.000000 0.000000 0.000000 0.000000 
25%  0.000000 0.000000 0.000000 0.000000 
50%  0.000000 0.000000 0.000000 0.013116 
75%  0.309019 0.065248 0.066667 0.192954 
max  1.000000 1.000000 1.000000 1.000000 

medians = df[['bp_prob', 'ICD9_prob', 'meds_prob', 'regex_prob']].median() 

stats.loc['median'] = medians 

stats 
Out[36]: 
      bp_prob ICD9_prob meds_prob regex_prob 
count 171.000000 171.000000 171.000000 171.000000 
mean  0.179946 0.059071 0.067020 0.126812 
std  0.271546 0.142681 0.152560 0.207014 
min  0.000000 0.000000 0.000000 0.000000 
25%  0.000000 0.000000 0.000000 0.000000 
50%  0.000000 0.000000 0.000000 0.013116 
75%  0.309019 0.065248 0.066667 0.192954 
max  1.000000 1.000000 1.000000 1.000000 
median 0.000000 0.000000 0.000000 0.013116