Python pandalarda sütun adından sütun dizini al


220

R'de, yapabileceğiniz sütunun adına göre bir sütun dizini almanız gerektiğinde

idx <- which(names(my_data)==my_colum_name)

Panda veri çerçeveleri ile aynı şeyi yapmanın bir yolu var mı?

Yanıtlar:


360

Tabii, kullanabilirsiniz .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

dürüst olmakla birlikte, sıklıkla kendime ihtiyacım yok. Genellikle adla erişim istediğim şeyi yapar ( df["pear"], df[["apple", "orange"]]veya belki de df.columns.isin(["orange", "pear"])), ancak dizin numarasını istediğiniz durumlarda kesinlikle görebilirim.


7
Sütun numarası, .ilocyalnızca satırlar ve sütunlar için yalnızca tamsayılar iletmeniz gereken işleç kullanılırken kullanışlıdır .
— abe

4
Veya DF'nin bir numpy dizisine ve belirli özelliklere sahip sütun indekslerine dönüştürülmesini isteyen kütüphaneleri kullanırken. Örneğin CatBoost, kategorik özelliklerin endekslerinin bir listesini ister.
— Tom Walker

1
ExcelWriter ile çalışma sayfaları oluşturduktan sonra koşullu biçimlendirme eklerken buna ihtiyacım vardı. Excel koordinatlarına göre sütunlara (ve hücrelere) başvurmam gerekiyor.
— Alejandro

Bir dizi alt grafik yaparken bunu kullanıyorum. Her sütundaki verilerden bir alt grafik.
— David Collins

2
insertVarolan bir sütundan sonra yeni bir sütun istediğimde kullanıyorum .
— Amir A. Shabani

33

İşte liste anlama yoluyla bir çözüm. cols, dizine eklenecek sütunların listesidir:

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

4
Bundan colsdaha az unsuru olduğu için df.columnsyapmak for c in cols if c in dfdaha hızlı olur.
— Eric O Lebigot

15

DSM'nin çözümü işe yarıyor, ancak doğrudan bir eşdeğer whichistiyorsanız(df.columns == name).nonzero()


10

Birden çok sütun eşleşmesi bulmak istediğinizde, searchsortedyöntemi kullanarak vektörize edilmiş bir çözüm kullanılabilir. Bu nedenle, dfveri çerçevesi ve query_colsaranacak sütun adları olarak, bir uygulama -

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

Örnek çalışma -

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])

8

Sütun adını sütun konumundan (OP sorusunun tam tersi) istiyorsanız, aşağıdakileri kullanabilirsiniz:

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

@DSM Kullanımı Örneği:

>>> 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'

Diğer yollar:

df.iloc[:,1].name

df.columns[location] #(thanks to @roobie-nuby for pointing that out in comments.) 

2
Neden sadece df.columns[location]?
— Roobie Nuby

1

buna ne dersin:

df = DataFrame({"pear": [1,2,3], "apple": [2,3,4], "orange": [3,4,5]})
out = np.argwhere(df.columns.isin(['apple', 'orange'])).ravel()
print(out)
[1 2]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.