2015-12-15 35 views
3
一個pandas.Series

假設我有一個的NaN系列:重新編碼含有0,1和NaN爲False,真和NaN

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,而不是Nonenp.nan如在R

是否有一個很好的,矢量化的方式來得到我想要的?

+0

'數據= data.astype(布爾)'應該給你想要的。 – MaxNoe

+0

@MaxNoe不,將NaNs改爲「True」(至少在0.17.1中是熊貓)。 – Kodiologist

回答

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 
+0

'x.map({0:False,1:True})'似乎就足夠了。也許這是最好的辦法。 – Kodiologist

1

您可以使用其中:

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

注:真與假劇組已懸空爲0和1

+0

也許我錯過了一些東西,但是這不會讓我回到原點嗎? 0和1是我想要替換的。 – Kodiologist

+0

@Kodiologist如果你有2s和3s,他們也會被設置爲false - > 0. –

+0

@Kodiologist也沒有nan的boolean(或int)類型,你必須使用低效率的對象/慢於浮點數。 –