Начиная с 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
, содержащие 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
Дополнительную информацию см. В документации по расширенному индексированию здесь.
person
Mohamed Ali JAMAOUI
schedule
04.07.2017
where
от NumPy, как показано в это решение ниже - person Ted Petrou   schedule 03.11.2017