A partire da Panda 0.20 ix è deprecato . Il modo giusto è usare df.loc
ecco un esempio funzionante
>>> 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
>>>
Spiegazione:
Come spiegato nel documento qui , .loc è principalmente basato sull'etichetta, ma può anche essere usato con una matrice booleana .
Quindi, quello che stiamo facendo sopra sta applicando df.loc[row_index, column_index]:
- Sfruttando il fatto che
locpuò prendere un array booleano come maschera che dice ai panda in quale sottoinsieme di righe vogliamo cambiarerow_index
- Lo sfruttamento del fatto
locè anche basato sull'etichetta per selezionare la colonna usando l'etichetta 'B'incolumn_index
Possiamo usare logico, condizione o qualsiasi operazione che ritorni una serie di booleani per costruire l'array di booleani. Nell'esempio sopra, vogliamo rowsche contenga un 0, per quello che possiamo usare df.A == 0, come puoi vedere nell'esempio sotto, questo restituisce una serie di booleani.
>>> 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
>>>
Quindi, utilizziamo l'array sopra di booleani per selezionare e modificare le righe necessarie:
>>> df.loc[df.A == 0, 'B'] = np.nan
>>> df
A B
0 0 NaN
1 1 0
2 0 NaN
Per ulteriori informazioni, consultare la documentazione di indicizzazione avanzata qui .
wherecome mostrato in questa soluzione di seguito