Python 根据设备中的条件制作NA
我觉得这可能有一个简单的解决方案,我就是想不出来 我有一个类似于此MWE的DF: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的所
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