Pandas用最近的方法插入bools

时间:2016-12-16 14:46:37

标签: python pandas numpy

如何使用最近的方法在pandas中插入bool值? 以下代码:

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.

1 个答案:

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

在回答你的问题时,

  

为什么我的方法失败了?

我认为这与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表现得非常意外,因为它使用True填充NaN。因此,原始答案似乎最有效。

*这与错误信息的内容完全一致,所以我可能会稍微偏离但我认为一般概念是正确的。