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.