2016-12-16 48 views
1

如何用最近的方法插值熊貓的bool值? 下面的代碼:熊貓用最近的方法插值bools

import pandas as pd 
import numpy as np 

df = pd.DataFrame({'b': np.random.rand(10) > 0.5}) 
df2 = df.iloc[[2,5,6,8]] 
df2.reindex(df.index).interpolate('nearest') 

產生一個錯誤:

TypeError: Cannot interpolate with all NaNs. 
+3

不是'df2.reindex(df.index,method ='nearest')'按預期工作嗎?它的工作原理是 –

+0

。謝謝。帖子是一個答案,我會接受它。爲什麼我的方法失敗了? –

回答

2

從Nickil Maveli的評論回答使用以下,

import pandas as pd 
import numpy as np 

df = pd.DataFrame({'b': np.random.rand(10) > 0.5}) 
df2 = df.iloc[[2,5,6,8]] 
df2.reindex(df.index, method='nearest') 

在answe你的問題,

why did my approach failed?

I相信這是與NaNs爲np.nan這一事實有關,因此屬於浮點型。在使用reindex時,它會填充NaN之前的所有NaN。因此,使用您的原始方法創建了一個混合數組floatbool *。

看看我們如何能夠在插值只是bool

df2.reindex(df.index).astype(bool).interpolate('nearest') 

Out[1]: 

    b 
0 True 
1 True 
2 True 
3 True 
4 True 
5 False 
6 False 
7 True 
8 False 
9 True 

或只是float

df2.reindex(df.index).astype(float).interpolate('nearest') 

Out[2]: 

    b 
0 NaN 
1 NaN 
2 1.0 
3 1.0 
4 1.0 
5 1.0 
6 0.0 
7 0.0 
8 0.0 
9 NaN 

注意,bool運行相當意外,因爲它填充用的NaN True。因此,最初的答案似乎工作效率最高。


*這與內容不完全符合錯誤信息的內容,所以我可能稍微偏離了一點,但我認爲一般概念是正確的。