Je suis nouveau sur stackoverflow et j'ai des recherches mais je n'ai pas trouvé de réponse satisfaisante.

Je comprends que je peux obtenir un index de ligne en utilisant df.iterrows () pour parcourir un df. Mais que se passe-t-il si je veux obtenir une position de ligne au lieu d'une ligne idx. Quelle méthode puis-je utiliser?

Un exemple de code sur lequel je travaille est ci-dessous:

df = pd.DataFrame({'month': ['Jan', 'Feb', 'March', 'April'],
               'year': [2012, 2014, 2013, 2014],
               'sale':[55, 40, 84, 31]})

df = df.set_index('month')

for idx, value in df.iterrows():
    print(idx)

Comment puis-je obtenir une sortie de:

0
1
2
3

Merci!

6
learner 23 mai 2018 à 12:52

4 réponses

Meilleure réponse

Si vous avez besoin d'un numéro de ligne au lieu d'un index, vous devez:

  1. Utilisez enumerate pour un compteur dans une boucle.
  2. N'extrayez pas l'index, voir les options ci-dessous.

Option 1

Dans la plupart des situations, pour des raisons de performances, vous devez essayer d'utiliser df.itertuples au lieu de df.iterrows. Vous pouvez spécifier index=False pour que le premier élément ne soit pas l'index.

for idx, row in enumerate(df.itertuples(index=False)):
    # do something

df.itertuples renvoie un tuple nommé pour chaque ligne.

Option 2

Utilisez df.iterrows. C'est plus lourd, car vous devez séparer une variable inutilisée. De plus, c'est inefficace vs itertuples.

for idx, (_, row) in enumerate(df.iterrows()):
    # do something
2
jpp 23 mai 2018 à 11:46

Vous pouvez utiliser get_loc sur df.index:

for idx, value in df.iterrows():
    print(idx, df.index.get_loc(idx))

Production:

Jan 0
Feb 1
March 2
April 3
1
Scott Boston 23 mai 2018 à 11:52

Utilisez simplement enumerate:

for idx, (_, value) in enumerate(df.iterrows()):
    print(idx)
3
nnnmmm 23 mai 2018 à 09:55

Vous pouvez utiliser df.index() qui renvoie une plage de nombres d'index. La valeur renvoyée est un objet RangeIndex qui est un range comme itérable qui prend en charge l'itération et de nombreuses autres fonctionnalités prises en charge par une série Pandas:

>>> df.index
RangeIndex(start=0, stop=4, step=1)
>>> 
>>> list(df.index)
[0, 1, 2, 3]
0
Kasramvd 23 mai 2018 à 09:56