2012-10-22 15 views

Odpowiedz

117

Oczywiście, można użyć .get_loc():

In [45]: df = DataFrame({"pear": [1,2,3], "apple": [2,3,4], "orange": [3,4,5]}) 

In [46]: df.columns 
Out[46]: Index([apple, orange, pear], dtype=object) 

In [47]: df.columns.get_loc("pear") 
Out[47]: 2 

choć szczerze mówiąc nie trzeba często ten sam. Zwykle dostęp po nazwie robi to, co chcę (df["pear"], df[["apple", "orange"]], lub może df.columns.isin(["orange", "pear"])), chociaż zdecydowanie mogę zobaczyć przypadki, w których chcesz numer indeksu. Rozwiązanie

+1

Numer kolumny jest przydatny, gdy używany jest operator '.iloc', w którym należy przekazywać tylko liczby całkowite dla obu wierszy i kolumn. – abe

+1

Lub przy użyciu bibliotek, które chcą przekonwertować DF na tablicę numpy i indeksy kolumn z określonymi funkcjami. Na przykład CatBoost chce listę indeksów cech kategorycznych. –

+0

Potrzebowałem tego podczas dodawania formatowania warunkowego po utworzeniu arkuszy roboczych za pomocą ExcelWriter. Muszę odwoływać się do kolumn (i komórek) według ich współrzędnych Excela. – Alejandro

9

DSM działa, ale jeśli chciałeś bezpośredni odpowiednik which można zrobić (df.columns == name).nonzero()

+0

To ma sens. Dzięki! – ak3nat0n

3

Kiedy może być patrząc na znalezienie wielu kolumnę zapałki, vectorized rozwiązanie wykorzystujące searchsorted method mogą być wykorzystane. Tak więc, z df jako dataframe i query_cols jak nazwy kolumn, aby być przeszukiwane, implementacja byłaby -

def column_index(df, query_cols): 
    cols = df.columns.values 
    sidx = np.argsort(cols) 
    return sidx[np.searchsorted(cols,query_cols,sorter=sidx)] 

Sample Run -

In [162]: df 
Out[162]: 
    apple banana pear orange peach 
0  8  3  4  4  2 
1  4  4  3  0  1 
2  1  2  6  8  1 

In [163]: column_index(df, ['peach', 'banana', 'apple']) 
Out[163]: array([4, 1, 0]) 
1

Oto rozwiązanie przez listowego. cols lista kolumn, aby uzyskać indeks:

[df.columns.get_loc(c) for c in df.columns if c in cols] 
+1

Ponieważ 'cols' ma mniej elementów niż' df.columns', robi 'dla c in cols, jeśli c in df' będzie szybszy. – EOL

0

W przypadku, gdy chcesz nazwę kolumny z położenia kolumny (na odwrót od kwestii PO), można użyć:

>>> df.columns.get_values()[location] 

Stosując @DSM Przykład:

>>> df = DataFrame({"pear": [1,2,3], "apple": [2,3,4], "orange": [3,4,5]}) 

>>> df.columns 

Index(['apple', 'orange', 'pear'], dtype='object') 

>>> df.columns.get_values()[1] 

'orange' 

inny sposób:

df.iloc[:,1].name 
Powiązane problemy