这是我原始的数据框,其中包含NaN
个值,我正在尝试填充这些值;
如果我使用df.interpolate(axis=1)
填充NaN
值,则只有部分行正确填充数字。
例如
正如您在屏幕截图列中看到的那样:1981年和具有NaN
值的行:3已正确填充了NaN
以外的值。我想填补NaN
的其余部分吗?知道我该怎么做?
答案 0 :(得分:0)
使用DataFrame.interpolate()
在你的情况下它失败了,因为左边没有列,因此插值方法不知道要将其插入到:missing_value = (left_value + right_value)/2
所以你可以,例如,在左边插入一个列,所有0'(如果你想在第一列上用下一个值的一半来计算你的缺失值),这样:
df.insert(loc=0, column='allZeroes', value=0)
在此之后,您可以按原样插值并删除列
一般缺失值估算
如果Alex在问题的评论中提到,请使用df.fillna('DEFAULT-VALUE')
。 Docs here
或做类似的事情:
df.my_col[df.my_col.isnull()] = 'DEFAULT-VALUE'
我建议您使用fillna
,因为您可以使用前向填充(ffill
)等方法 - 使用前一个值填充缺失 - 以及其他类似方法。
答案 1 :(得分:0)
好像你可能希望在axis=0
上进行插值,按列:
>>> df = pd.DataFrame(np.arange(35, dtype=float).reshape(5,7),
columns=[1951, 1961, 1971, 1981, 1991, 2001, 2001],
index=range(0, 5))
>>> df.iloc[1:3, 0] = np.nan
>>> df.iloc[3, 3] = np.nan
>>> df.interpolate(axis=0)
1951 1961 1971 1981 1991 2001 2001
0 0.0 1.0 2.0 3.0 4.0 5.0 6.0
1 7.0 8.0 9.0 10.0 11.0 12.0 13.0
2 14.0 15.0 16.0 17.0 18.0 19.0 20.0
3 21.0 22.0 23.0 24.0 25.0 26.0 27.0
4 28.0 29.0 30.0 31.0 32.0 33.0 34.0
目前你正在逐行插值。 “开始”系列的NaN
不会被任何一侧的值填充,因此无法进行插值。
更新:pandas为adding some more optionality for this in v 0.23.0。