2015-09-12 25 views
10

Quindi il mio google-fu non sembra rendermi giustizia con quello che sembra dovrebbe essere una procedura banale.Ordine di colonna di conservazione - Pats e colonna Python Concat

In Pandas per Python ho 2 set di dati, voglio unirli. Funziona bene con .concat. Il problema è, .concat riordina le mie colonne. Dal punto di vista del recupero dei dati, questo è banale. Da un punto di vista "Voglio solo aprire il file e vedere rapidamente la colonna più importante", questo è fastidioso.

File1.csv 
Name Username Alias1 
Tom  Tomfoolery TJZ 
Meryl MsMeryl  Mer 
Timmy Midsize  Yoda 

File2.csv 
Name Username Alias 1 Alias 2 
Bob  Firedbob Fire  Gingy 
Tom  Tomfoolery TJZ  Awww 

Result.csv 
    Alias1 Alias2 Name Username 
0 TJZ NaN  Tom  Tomfoolery 
1 Mer NaN  Meryl MsMeryl 
2 Yoda NaN  Timmy Midsize 
0 Fire Gingy Bob  Firedbob 
1 TJZ Awww  Tom  Tomfoolery 

Il risultato è soddisfacente, ma nel file di dati con cui lavoro ho 1.000 colonne. I 2-3 più importanti sono ora nel mezzo. C'è un modo, in questo esempio di giocattolo, potrei aver forzato "Username" per essere la prima colonna e "Name" per essere la seconda colonna, preservando ovviamente i valori sotto ciascuno fino in fondo.

Anche come nota a margine, quando si salva su file salva anche quella numerazione sul lato (0 1 2 0 1). Se c'è un modo per evitare anche quello, sarebbe bello. In caso contrario, non è un grosso problema dato che è una soluzione rapida da rimuovere.

Grazie!

risposta

8

Supponendo che il dataframe concatenato è df, è possibile eseguire il riordino delle colonne come segue:

important = ['Username', 'Name'] 
reordered = important + [c for c in df.columns if c not in important] 
df = df[reordered] 
print df 

uscita:

 Username Name Alias1 Alias2 
0 Tomfoolery Tom TJZ NaN 
1  MsMeryl Meryl Mer NaN 
2  Midsize Timmy Yoda NaN 
0 Firedbob Bob Fire Gingy 
1 Tomfoolery Tom TJZ Awww 

L'elenco dei numeri [0, 1, 2, 0, 1] è l'indice del dataframe. Per impedire che vengano scritti nel file di output, è possibile utilizzare l'opzione index=False in to_csv():

df.to_csv('Result.csv', index=False, sep=' ')