从 pandas 0.20 ix is deprecated 开始。正确的方法是使用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
>>>
解释:
如文档here 中所述,.loc 主要基于标签,但也可以与布尔数组一起使用。
所以,我们上面所做的就是应用df.loc[row_index, column_index] by:
- 利用
loc 可以将布尔数组作为掩码,告诉pandas 我们要在row_index 中更改哪些行子集
- 利用
loc这一事实也是基于标签的,以使用column_index中的标签'B'选择列
我们可以使用逻辑、条件或任何返回一系列布尔值的操作来构造布尔值数组。在上面的示例中,我们想要任何包含0 的rows,为此我们可以使用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
有关详细信息,请查看高级索引文档here。