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]
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 .