Dans R lorsque vous devez récupérer un index de colonne en fonction du nom de la colonne que vous pourriez faire
idx <- which(names(my_data)==my_colum_name)
Existe-t-il un moyen de faire de même avec les cadres de données pandas?
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'en ai pas souvent besoin 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 certainement voir des cas où vous voudriez le numéro d'index.
.iloc
opérateur, où vous ne devez transmettre que des entiers pour les lignes et les colonnes.insert
une nouvelle colonne après une colonne existante.Voici une solution grâce à la compréhension des listes. cols est la liste des colonnes pour lesquelles obtenir l'index:
la source
cols
a moins d'éléments quedf.columns
, fairefor c in cols if c in df
serait plus rapide.La solution de DSM fonctionne, mais si vous vouliez un équivalent direct,
which
vous pourriez le faire(df.columns == name).nonzero()
la source
Lorsque vous cherchez à trouver plusieurs correspondances de colonnes, une solution vectorisée utilisant une
searchsorted
méthode peut être utilisée. Ainsi, avecdf
comme cadre de données etquery_cols
comme noms de colonnes à rechercher, une implémentation serait -Exemple d'exécution -
la source
Si vous souhaitez que le nom de la colonne de l'emplacement de la colonne (l'inverse de la question OP), vous pouvez utiliser:
Utilisation de l'exemple @DSM:
D'autres moyens:
la source
df.columns[location]
?que dis-tu de ça:
la source