Jawaban:
Tentu, Anda bisa menggunakan .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
walaupun jujur saja saya tidak sering membutuhkan ini sendiri. Biasanya akses berdasarkan nama melakukan apa yang saya inginkan ( df["pear"],, df[["apple", "orange"]]atau mungkin df.columns.isin(["orange", "pear"])), meskipun saya pasti dapat melihat kasus di mana Anda ingin nomor indeks.
insertkolom baru setelah kolom yang ada.
Berikut adalah solusi melalui pemahaman daftar. cols adalah daftar kolom untuk mendapatkan indeks untuk:
[df.columns.get_loc(c) for c in cols if c in df]
colsmemiliki lebih sedikit elemen daripada df.columns, melakukan for c in cols if c in dfakan lebih cepat.
Solusi DSM berfungsi, tetapi jika Anda ingin yang setara langsung dengan yang dapat whichAnda lakukan(df.columns == name).nonzero()
Ketika Anda mungkin mencari untuk menemukan beberapa kolom yang cocok, solusi vektor menggunakan searchsortedmetode dapat digunakan. Dengan demikian, dengan dfsebagai kerangka data dan query_colssebagai nama kolom yang akan dicari, suatu implementasi akan -
def column_index(df, query_cols):
cols = df.columns.values
sidx = np.argsort(cols)
return sidx[np.searchsorted(cols,query_cols,sorter=sidx)]
Contoh dijalankan -
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])
Jika Anda ingin nama kolom dari lokasi kolom (sebaliknya ke pertanyaan OP), Anda dapat menggunakan:
>>> df.columns.get_values()[location]
Menggunakan Contoh @DSM:
>>> 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'
Cara lain:
df.iloc[:,1].name
df.columns[location] #(thanks to @roobie-nuby for pointing that out in comments.)
df.columns[location]?
.ilocoperator, di mana Anda hanya harus melewati bilangan bulat untuk baris dan kolom.