2017-01-31 9 views
28

Czy istnieje sposób na uporządkowanie kolumn w ramce danych pandy na podstawie moich osobistych preferencji (tj. Nie sortowanych alfabetycznie lub alfabetycznie, ale bardziej zgodnie z niektórymi konwencjami)?Ustawianie kolejności kolumn w ramce danych pandy

Prosty przykład:

frame = pd.DataFrame({ 
     'one thing':[1,2,3,4], 
     'second thing':[0.1,0.2,1,2], 
     'other thing':['a','e','i','o']}) 

produkuje to:

one thing other thing second thing 
0   1   a   0.1 
1   2   e   0.2 
2   3   i   1.0 
3   4   o   2.0 

Ale zamiast tego, chciałbym to:

one thing second thing other thing 
0   1   0.1   a 
1   2   0.2   e 
2   3   1.0   i 
3   4   2.0   o 

(Proszę podać ogólny rozwiązanie aniżeli specyficzne ten przypadek. Wielkie dzięki.)

Odpowiedz

38

Po prostu wybierz kolejność, wpisując nazwy kolumn. Uwaga podwójne wsporniki:

frame = frame[['column I want first', 'column I want second'...etc.]] 
10

Można też zrobić coś takiego df = df[['x', 'y', 'a', 'b']]

import pandas as pd 
frame = pd.DataFrame({'one thing':[1,2,3,4],'second thing':[0.1,0.2,1,2],'other thing':['a','e','i','o']}) 
frame = frame[['second thing', 'other thing', 'one thing']] 
print frame 
    second thing other thing one thing 
0   0.1   a   1 
1   0.2   e   2 
2   1.0   i   3 
3   2.0   o   4 

Ponadto, można uzyskać listę kolumn:

cols = list(df.columns.values) 

Wyjście będzie produkować coś podobnego to:

['x', 'y', 'a', 'b'] 

Można łatwo przestawiać ręcznie.

5

Można również użyć OrderedDict:

In [183]: from collections import OrderedDict 

In [184]: data = OrderedDict() 

In [185]: data['one thing'] = [1,2,3,4] 

In [186]: data['second thing'] = [0.1,0.2,1,2] 

In [187]: data['other thing'] = ['a','e','i','o'] 

In [188]: frame = pd.DataFrame(data) 

In [189]: frame 
Out[189]: 
    one thing second thing other thing 
0   1   0.1   a 
1   2   0.2   e 
2   3   1.0   i 
3   4   2.0   o 
8

Construct go z listy zamiast słownika

frame = pd.DataFrame([ 
     [1, .1, 'a'], 
     [2, .2, 'e'], 
     [3, 1, 'i'], 
     [4, 4, 'o'] 
    ], columns=['one thing', 'second thing', 'other thing']) 

frame 

    one thing second thing other thing 
0   1   0.1   a 
1   2   0.2   e 
2   3   1.0   i 
3   4   4.0   o 
7

Można użyć tego:

columnsTitles = ['onething', 'secondthing', 'otherthing'] 

frame.reindex(columns=columnsTitles)