A partir de pandas 0.20 ix está en desuso . La forma correcta es usar df.loc
aquí hay un ejemplo de trabajo
>>> 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
>>>
Explicación:
Como se explica en el documento aquí , .loc
se basa principalmente en etiquetas, pero también se puede usar con una matriz booleana .
Entonces, lo que estamos haciendo arriba es aplicar df.loc[row_index, column_index]
por:
- Explotando el hecho de que
loc
puede tomar una matriz booleana como una máscara que le dice a los pandas en qué subconjunto de filas queremos cambiarrow_index
- La explotación del hecho
loc
también se basa en la etiqueta para seleccionar la columna utilizando la etiqueta 'B'
en elcolumn_index
Podemos usar lógica, condición o cualquier operación que devuelva una serie de booleanos para construir la matriz de booleanos. En el ejemplo anterior, queremos cualquiera rows
que contenga un 0
, para eso podemos usar df.A == 0
, como puede ver en el ejemplo a continuación, esto devuelve una serie de booleanos.
>>> 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
>>>
Luego, usamos la matriz de booleanos anterior para seleccionar y modificar las filas necesarias:
>>> df.loc[df.A == 0, 'B'] = np.nan
>>> df
A B
0 0 NaN
1 1 0
2 0 NaN
Para obtener más información, consulte la documentación de indexación avanzada aquí .
where
como se ve en esta solución a continuación