410 Stimmen

Spaltenindex aus Spaltenname in Python Pandas abrufen

Wenn Sie in R einen Spaltenindex basierend auf dem Namen der Spalte abrufen müssen, können Sie Folgendes tun

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

Gibt es eine Möglichkeit, das gleiche mit Pandas Dataframes zu tun?

13voto

mallet Punkte 2185

Update: "Veraltet seit Version 0.25.0: Verwenden Sie stattdessen np.asarray(..) oder DataFrame.values()." pandas docs

Für den Fall, dass Sie den Spaltennamen von der Position der Spalte ableiten wollen (andersherum als in der Frage des Autors), können Sie dies tun:

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

Mit @DSM Beispiel:

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

>>> df.columns

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

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

'orange'

Andere Möglichkeiten:

df.iloc[:,1].name

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

10voto

JoeTheShmoe Punkte 423

Um die Antwort von DSM ein wenig zu modifizieren, get_loc hat in der aktuellen Version von Pandas (1.1.5) einige merkwürdige Eigenschaften, die vom Typ des Index abhängen, so dass Sie je nach Index-Typ einen Index, eine Maske oder ein Slice zurückbekommen können. Das ist etwas frustrierend für mich, weil ich nicht die gesamten Spalten ändern möchte, nur um den Index einer Variablen zu extrahieren. Viel einfacher ist es, die Funktion ganz zu vermeiden:

list(df.columns).index('pear')

Sehr einfach und wahrscheinlich ziemlich schnell.

5voto

QuentinJS Punkte 107

Wenn die Spalte existieren könnte oder auch nicht, dann funktioniert die folgende (Variante von oben).

ix = 'none'
try:
     ix = list(df.columns).index('Col_X')
except ValueError as e:
     ix = None  
     pass

if ix is None:
   # do something

4voto

Siraj S. Punkte 3071

Wie wäre es damit:

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]

0voto

Shawn Seamons Punkte 1
import random
def char_range(c1, c2):                      # question 7001144
    for c in range(ord(c1), ord(c2)+1):
        yield chr(c)      
df = pd.DataFrame()
for c in char_range('a', 'z'):               
    df[f'{c}'] = random.sample(range(10), 3) # Random Data
rearranged = random.sample(range(26), 26)    # Random Order
df = df.iloc[:, rearranged]
print(df.iloc[:,:15])                        # 15 Col View         

for col in df.columns:             # List of indices and columns
    print(str(df.columns.get_loc(col)) + '\t' + col)

![Ergebnisse]( Ergebnisse

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X