2015-09-12 24 views
10

Mojego google-fu nie wydaje mi się, żebym robił mi sprawiedliwość, co wydaje się być banalną procedurą.Zachowanie kolejności kolumn - Pandy Pythona i konkluzji kolumnowej

W Pandach dla Pythona mam 2 zbiory danych, chcę je scalić. Działa to dobrze przy użyciu .concat. Problem polega na tym, .concat zmienia kolejność moich kolumn. Z punktu widzenia pobierania danych jest to banalne. Od "Po prostu chcę otworzyć plik i szybko zobaczyć najważniejszą kolumnę" punktu widzenia, jest to denerwujące.

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 

Wynik jest poprawny, ale w pliku danych, z którym pracuję, mam 1000 kolumn. 2-3 najważniejsze są teraz w środku. Czy jest jakiś sposób, w tym zabawkowym przykładzie, mógłbym wymusić "Username" jako pierwszą kolumnę, a "Name" by być drugą kolumną, zachowując oczywiście wartości poniżej każdego z najniższych poziomów.

Również jako notatkę boczną, po zapisaniu do pliku zapisuję również numerację z boku (0 1 2 0 1). Jeśli istnieje sposób, aby temu zapobiec, byłoby fajnie. Jeśli nie, nie jest to wielka sprawa, ponieważ jest to łatwa do usunięcia.

Dzięki!

Odpowiedz

8

Zakładając łączone DataFrame jest df można przeprowadzić zmianę kolejności kolumn w następujący sposób:

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

wyjściowa:

 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 

Lista numerów [0, 1, 2, 0, 1] jest indeksem DataFrame. Aby uniemożliwić zapisanie ich w pliku wyjściowym, można użyć opcji index=False w jednostce to_csv():

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