2016-12-16 5 views
1

最も近い方法を使ってパンダのブール値を補間する方法は? 次のコード:パンダは最も近い方法で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') 

はエラー生成されますNickil Maveliさんのコメント回答から

TypeError: Cannot interpolate with all NaNs. 
+3

'df2.reindex(df.index、method = 'nearest')'は意図したとおりに動作しませんか? –

+0

が動作します。ありがとうございました。投稿は答えです。私はそれを受け入れます。なぜ私のアプローチは失敗しましたか? –

答えて

2

は、以下を使用して、あなたの質問にansweで

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') 

を、

why did my approach failed?

Iこれは、NaNが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 

を上の補間またはそれがTrueとNaNを埋めるようboolはむしろ予期せずに動作することだけ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 

通知をする方法を参照してください。したがって、元の答えは最も効率的に働くようです。


*これは、エラーメッセージはので、私は少しオフ可能性が言っていることとかなりインラインではありませんが、私は一般的な概念が正しいことだと思います。

関連する問題