Python 根据设备中的条件制作NA

Python 根据设备中的条件制作NA,python,pandas,nan,Python,Pandas,Nan,我觉得这可能有一个简单的解决方案,我就是想不出来 我有一个类似于此MWE的DF: In [92]: test_df = pd.DataFrame({'A': [1,2,3,4,5,6,7,8,9], 'B':[9,8,7,6,5,4,3,2,1]}) In [93]: test_df Out[93]: A B 0 1 9 1 2 8 2 3 7 3 4 6 4 5 5 5 6 4 6 7 3 7 8 2 8 9 1 我想要的是将该df中小于4的所

我觉得这可能有一个简单的解决方案,我就是想不出来

我有一个类似于此MWE的DF:

In [92]: test_df = pd.DataFrame({'A': [1,2,3,4,5,6,7,8,9], 'B':[9,8,7,6,5,4,3,2,1]})

In [93]: test_df
Out[93]: 
   A  B
0  1  9
1  2  8
2  3  7
3  4  6
4  5  5
5  6  4
6  7  3
7  8  2
8  9  1
我想要的是将该df中小于4的所有值设置为
np.nan
。我可以根据以下条件得到布尔函数的df:

In [94]: test_df < 4
Out[94]: 
       A      B
0   True  False
1   True  False
2   True  False
3  False  False
4  False  False
5  False  False
6  False   True
7  False   True
8  False   True
[94]中的

出[94]:
A B
0对错
1对错
2对错
3假假
4假假
5假假
6假真实
7假真实
8假真实

但是我不知道最后一步是什么,使这些值成为真正的值
np.nan
。我以为这可以通过
test_df.loc
实现,但我的尝试没有成功。

您可以使用以下方法分配
NaN

或:

[47]中的
:test_df.where(~(test_df<4))
出[47]:
A B
0.9.0
1.8.0
2.7.0
3  4.0  6.0
4  5.0  5.0
5  6.0  4.0
6.7.0南
7.8.0南
8.9.0南
使用,默认情况下,
布尔掩码的
True
值替换为
NaN

print (test_df.mask(test_df < 4))
     A    B
0  NaN  9.0
1  NaN  8.0
2  NaN  7.0
3  4.0  6.0
4  5.0  5.0
5  6.0  4.0
6  7.0  NaN
7  8.0  NaN
8  9.0  NaN
In [43]: test_df.where(test_df >= 4)
Out[43]:
     A    B
0  NaN  9.0
1  NaN  8.0
2  NaN  7.0
3  4.0  6.0
4  5.0  5.0
5  6.0  4.0
6  7.0  NaN
7  8.0  NaN
8  9.0  NaN
In [47]: test_df.where(~(test_df < 4))
Out[47]:
     A    B
0  NaN  9.0
1  NaN  8.0
2  NaN  7.0
3  4.0  6.0
4  5.0  5.0
5  6.0  4.0
6  7.0  NaN
7  8.0  NaN
8  9.0  NaN
print (test_df.mask(test_df < 4))
     A    B
0  NaN  9.0
1  NaN  8.0
2  NaN  7.0
3  4.0  6.0
4  5.0  5.0
5  6.0  4.0
6  7.0  NaN
7  8.0  NaN
8  9.0  NaN
test_df = test_df[test_df >= 4]
print (test_df)
     A    B
0  NaN  9.0
1  NaN  8.0
2  NaN  7.0
3  4.0  6.0
4  5.0  5.0
5  6.0  4.0
6  7.0  NaN
7  8.0  NaN
8  9.0  NaN