web-dev-qa-db-fra.com

fonction loc dans pandas

Quelqu'un peut-il expliquer pourquoi loc est utilisé dans python pandas avec des exemples comme indiqué ci-dessous?

for i in range(0, 2):
  for j in range(0, 3):
    df.loc[(df.Age.isnull()) & (df.Gender == i) & (df.Pclass == j+1),
            'AgeFill'] = median_ages[i,j]
17
kenway

L'utilisation de .loc Est recommandée ici car les méthodes df.Age.isnull(), df.Gender == i Et df.Pclass == j+1 Peuvent renvoyer une vue des tranches du bloc de données ou renvoyer un copie. Cela peut confondre les pandas.

Si vous n'utilisez pas .loc, Vous finissez par appeler les 3 conditions en série, ce qui vous conduit à un problème appelé indexation chaînée . Lorsque vous utilisez .loc, Vous accédez à toutes vos conditions en une seule étape et pandas n'est plus confondu.

Vous pouvez en savoir plus à ce sujet ainsi que quelques exemples de cas où l'utilisation de .loc Entraînera l'échec de l'opération dans documentation pandas .

La réponse est simple: bien que vous puissiez souvent vous en tirer sans utiliser .loc Et simplement taper (par exemple)

df['Age_fill'][(df.Age.isnull()) & (df.Gender == i) & (df.Pclass == j+1)] \
                                                          = median_ages[i,j]

vous obtiendrez toujours l'avertissement SettingWithCopy et votre code sera un peu plus compliqué.

D'après mon expérience, .loc M'a mis un peu de temps à comprendre et cela a été un peu ennuyeux de mettre à jour mon code. Mais c'est vraiment super simple et très intuitif: df.loc[row_index,col_indexer].

Pour plus d'informations, consultez la documentation pandas sur Indexation et sélection de données .

21
KirstieJane