web-dev-qa-db-fra.com

Obtenir l'index de colonne du nom de la colonne dans python pandas

Dans R, vous devez récupérer un index de colonne en fonction du nom de la colonne.

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

Existe-t-il un moyen de faire la même chose avec pandas dataframes?

154
ak3nat0n

Bien sûr, vous pouvez utiliser .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

bien que pour être honnête je n'ai pas souvent besoin de cela moi-même. Habituellement, l'accès par nom fait ce que je veux (df["pear"], df[["Apple", "orange"]], ou peut-être df.columns.isin(["orange", "pear"])), bien que je puisse clairement voir les cas où vous voudriez le numéro d'index.

249
DSM

Voici une solution par compréhension de liste. cols est la liste des colonnes pour lesquelles indexer:

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

La solution de DSM fonctionne, mais si vous vouliez un équivalent direct de which, vous pourriez faire (df.columns == name).nonzero()

14
Wes McKinney

Lorsque vous souhaitez rechercher plusieurs correspondances de colonne, une solution vectorisée utilisant la méthode searchsorted peut être utilisée. Ainsi, avec df comme base de données et query_cols comme noms de colonne à rechercher, une implémentation serait -

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

Exemple de cycle -

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

Si vous voulez le nom de la colonne à partir de l’emplacement de la colonne (à l’inverse de la question OP), vous pouvez utiliser:

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

Utilisation de @DSM Exemple:

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

Autrement:

df.iloc[:,1].name
8
salhin