如何使用最近的方法在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.
答案 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。因此,使用原始方法会创建float
和bool
*。
了解我们如何仅在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。因此,原始答案似乎最有效。
*这与错误信息的内容完全一致,所以我可能会稍微偏离但我认为一般概念是正确的。