À partir de pandas 0.20 ix est obsolète . La bonne façon est d'utiliser df.loc
voici un exemple de travail
>>> import pandas as pd
>>> import numpy as np
>>> df = pd.DataFrame({"A":[0,1,0], "B":[2,0,5]}, columns=list('AB'))
>>> df.loc[df.A == 0, 'B'] = np.nan
>>> df
A B
0 0 NaN
1 1 0
2 0 NaN
>>>
Explication:
Comme expliqué dans le document ici , .loc
est principalement basé sur les étiquettes, mais peut également être utilisé avec un tableau booléen .
Donc, ce que nous faisons ci-dessus est d'appliquer df.loc[row_index, column_index]
en:
- Exploiter le fait que
loc
peut prendre un tableau booléen comme masque qui indique aux pandas dans quel sous-ensemble de lignes nous voulons changerrow_index
- L'exploitation du fait
loc
est également basée sur l'étiquette pour sélectionner la colonne en utilisant l'étiquette 'B'
dans lecolumn_index
Nous pouvons utiliser la logique, la condition ou toute opération qui retourne une série de booléens pour construire le tableau de booléens. Dans l'exemple ci-dessus, nous voulons tout ce rows
qui contient un 0
, pour cela, nous pouvons utiliser df.A == 0
, comme vous pouvez le voir dans l'exemple ci-dessous, cela renvoie une série de booléens.
>>> df = pd.DataFrame({"A":[0,1,0], "B":[2,0,5]}, columns=list('AB'))
>>> df
A B
0 0 2
1 1 0
2 0 5
>>> df.A == 0
0 True
1 False
2 True
Name: A, dtype: bool
>>>
Ensuite, nous utilisons le tableau de booléens ci-dessus pour sélectionner et modifier les lignes nécessaires:
>>> df.loc[df.A == 0, 'B'] = np.nan
>>> df
A B
0 0 NaN
1 1 0
2 0 NaN
Pour plus d'informations, consultez la documentation sur l'indexation avancée ici .
where
comme indiqué dans cette solution ci