pd.DataFrame.loc
peut prendre un ou deux indexeurs. Pour le reste du message, je représenterai le premier indexeur par i
et le deuxième indexeur par j
.
Si un seul indexeur est fourni, il s'applique à l'index du dataframe et l'indexeur manquant est supposé représenter toutes les colonnes. Ainsi, les deux exemples suivants sont équivalents.
df.loc[i]
df.loc[i, :]
Où :
est utilisé pour représenter toutes les colonnes.
Si les deux indexeurs sont présents, i
fait référence aux valeurs de l'index et j
fait référence aux valeurs des colonnes.
Maintenant, nous pouvons nous concentrer sur les types de valeurs que i
et j
peuvent prendre. Utilisons le dataframe suivant df
comme exemple:
df = pd.DataFrame([[1, 2], [3, 4]], index=['A', 'B'], columns=['X', 'Y'])
loc
a été écrit de telle sorte que i
et j
peuvent être
-
des scalaires qui devraient être des valeurs dans les objets d'index respectifs
df.loc['A', 'Y']
2
-
des tableaux dont les éléments sont également des membres des objets d'index respectifs (notez que l'ordre du tableau que je passe à loc
est respecté
df.loc[['B', 'A'], 'X']
B 3
A 1
Name: X, dtype: int64
-
Remarquez la dimensionnalité de l'objet renvoyé lors du passage de tableaux. i
est un tableau comme ci-dessus, loc
renvoie un objet dans lequel un index avec ces valeurs est renvoyé. Dans ce cas, parce que j
était un scalaire, loc
a renvoyé un objet pd.Series
. Nous aurions pu manipuler ceci pour renvoyer un dataframe si nous avions passé un tableau pour i
et j
, et le tableau aurait pu être simplement un tableau de valeurs uniques.
df.loc[['B', 'A'], ['X']]
X
B 3
A 1
-
des tableaux booléens dont les éléments sont True
ou False
et dont la longueur correspond à la longueur de l'index respectif. Dans ce cas, loc
récupère simplement les lignes (ou colonnes) pour lesquelles le tableau booléen est True
.
df.loc[[True, False], ['X']]
X
A 1
En plus des indexeurs que vous pouvez passer à loc
, il vous permet également de faire des affectations. Maintenant, nous pouvons analyser la ligne de code que vous avez fournie.
iris_data.loc[iris_data['class'] == 'versicolor', 'class'] = 'Iris-versicolor'
iris_data['class'] == 'versicolor'
renvoie un tableau booléen.
class
est un scalaire qui représente une valeur dans l'objet des colonnes.
iris_data.loc[iris_data['class'] == 'versicolor', 'class']
renvoie un objet pd.Series
composé de la colonne 'class'
pour toutes les lignes où 'class'
est 'versicolor'
-
Lorsqu'il est utilisé avec un opérateur d'affectation:
iris_data.loc[iris_data['class'] == 'versicolor', 'class'] = 'Iris-versicolor'
Nous attribuons 'Iris-versicolor'
pour tous les éléments de la colonne 'class'
où 'class'
était 'versicolor'