Python 在pandas中将'replace'与'isnull'组合

Python 在pandas中将'replace'与'isnull'组合,python,pandas,Python,Pandas,我尝试根据同一数据帧中另一个系列的缺失值来选择一个系列的部分 我使用了.loc,这是一个很好的解决方案 df.loc[df[“B”].isnull(),“A”]=np.NaN 最初我想使用: df[“A”].replace(df[“B”].isnull(),np.NaN,inplace=True) 这是行不通的。为什么会这样?replace用于替换特定值,但它不适用于布尔掩码。如果要屏蔽元素,正确的函数应该是或 最小可验证示例 df = pd.DataFrame({'A': ['a', '

我尝试根据同一数据帧中另一个系列的缺失值来选择一个系列的部分

我使用了
.loc
,这是一个很好的解决方案

df.loc[df[“B”].isnull(),“A”]=np.NaN
最初我想使用:

df[“A”].replace(df[“B”].isnull(),np.NaN,inplace=True)

这是行不通的。为什么会这样?

replace
用于替换特定值,但它不适用于布尔掩码。如果要屏蔽元素,正确的函数应该是或


最小可验证示例

df = pd.DataFrame({'A': ['a', 'b', 'c'], 'B': [np.nan, 1, np.nan], })
df
   A    B
0  a  NaN
1  b  1.0
2  c  NaN

# df['A'].where(~df['B'].isnull(), inplace=True)
df['A'].mask(df['B'].isnull(), inplace=True)
df
     A    B
0  NaN  NaN
1    b  1.0
2  NaN  NaN

replace
用于替换特定值,它不适用于布尔掩码。如果要屏蔽元素,正确的函数应该是或


最小可验证示例

df = pd.DataFrame({'A': ['a', 'b', 'c'], 'B': [np.nan, 1, np.nan], })
df
   A    B
0  a  NaN
1  b  1.0
2  c  NaN

# df['A'].where(~df['B'].isnull(), inplace=True)
df['A'].mask(df['B'].isnull(), inplace=True)
df
     A    B
0  NaN  NaN
1    b  1.0
2  NaN  NaN

非常感谢你。
mask
Where
之间的区别在哪里?@ChrisBe
a.Where(mask,b)
np相同。其中(m,a,b)
a.mask(mask,b)
np相同。其中(m,b,a)
@ChrisBe这里我推荐
mask
,因为你不必反转
df['b'].isnull()
之后,效率会提高一点。对不起,我忘了。谢谢各位,非常感谢。
mask
Where
之间的区别在哪里?@ChrisBe
a.Where(mask,b)
np相同。其中(m,a,b)
a.mask(mask,b)
np相同。其中(m,b,a)
@ChrisBe这里我推荐
mask
,因为你不必反转
df['b'].isnull()
之后,效率会提高一点。对不起,我忘了。谢谢各位。