将包含0,1和NaN的pandas.Series重新编码为False,True和NaN

时间:2015-12-15 17:04:18

标签: pandas

假设我有一个带NaNs的系列:

pd.Series([0, 1, None, 1])

我想将其转换为等于:

pd.Series([False, True, None, True])

您认为x == 1就足够了,但这会返回:

pd.Series([False, True, False, True])

其中null值变为False。这是因为np.nan == 1返回False,而不是像R中的Nonenp.nan

是否有一种很好的,矢量化的方式来获得我想要的东西?

2 个答案:

答案 0 :(得分:1)

你可以在哪里使用:

In [11]: (s == 1).where(s.notnull(), np.nan)
Out[11]:
0     0
1     1
2   NaN
3     1
dtype: float64

注意:True和False已被强制转换为0和1。

答案 1 :(得分:1)

也许map可以做到:

import pandas as pd

x = pd.Series([0, 1, None, 1])

print x.map({1: True, 0: False})

0    False
1     True
2      NaN
3     True
dtype: object