Начиная с pandas 0.20 ix устарела . Правильный способ - использовать df.loc
вот рабочий пример
>>> 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
>>>
Пояснение:
Как объясняется здесь , .loc
в основном это метка, но может также использоваться с логическим массивом .
Итак, то, что мы делаем выше, применяется df.loc[row_index, column_index]
:
- Используя тот факт, что
loc
логический массив может использоваться в качестве маски, которая сообщает пандам, какое подмножество строк мы хотим изменитьrow_index
- Использование факта
loc
также основано на метке для выбора столбца с помощью метки 'B'
вcolumn_index
Мы можем использовать логические, условные или любую операцию, возвращающую серию логических значений, для создания массива логических значений. В приведенном выше примере нам нужны все, rows
которые содержат a 0
, для этого мы можем использовать df.A == 0
, как вы можете видеть в приведенном ниже примере, это возвращает серию логических значений.
>>> 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
>>>
Затем мы используем указанный выше массив логических значений для выбора и изменения необходимых строк:
>>> df.loc[df.A == 0, 'B'] = np.nan
>>> df
A B
0 0 NaN
1 1 0
2 0 NaN
Дополнительные сведения см. В документации по расширенному индексированию здесь .
where
как показано в этом решении ниже