【问题标题】:Pandas index interpolation filling in missing values after the last data pointPandas 索引插值在最后一个数据点之后填充缺失值
【发布时间】:2018-07-17 17:23:55
【问题描述】:

在列的末尾有一个缺失值的数据框,f.e.:

df = pd.DataFrame({'a':[np.nan,1,2,np.nan,np.nan,5,np.nan,np.nan]}, index=[0,1,2,3,4,5,6,7])

     a
0  NaN
1  1.0
2  2.0
3  NaN
4  NaN
5  5.0
6  NaN
7  NaN

使用'index'插值法:

df.interpolate(method='index')

返回最后一个缺失值向前填充的数据框:

     a
0  NaN
1  1.0
2  2.0
3  3.0
4  4.0
5  5.0
6  5.0
7  5.0

有没有办法关闭该行为并保留最后的缺失值:

     a
0  NaN
1  1.0
2  2.0
3  3.0
4  4.0
5  5.0
6  NaN
7  NaN

【问题讨论】:

标签: python pandas dataframe interpolation


【解决方案1】:

我认为0.23.0+ 中需要新参数limit_direction,检查this

df = df.interpolate(method='index', limit=1, limit_direction='backward')
print (df)
     a
1  1.0
2  2.0
3  3.0
4  4.0
5  5.0
6  NaN
7  NaN

编辑:如果只想在添加参数limit_area 内替换NaNs:

df = df.interpolate(method='index',limit_area='inside')
print (df)
     a
0  NaN
1  1.0
2  2.0
3  3.0
4  4.0
5  5.0
6  NaN
7  NaN

【讨论】:

  • 数据点之间可以有任意数量的值,修改了问题中的示例。
  • @KrzysztofSłowiński - 关于将limit=1 更改为limit=len(df)
  • NaN也可以在数据框的开头,再次修改示例。
【解决方案2】:

您的意思是应该保留最后一个 NaN(一个或多个)吗? 这个怎么样。 找到最后一个有效的 arg 索引并拆分、插值和追加。

valargmax=np.max(np.where((df.isnull().eq(False).values==True).flatten()==True))
r = df[0:(valargmax+1)].interpolate(method='index').append(df[(valargmax+1):])
print(r)

【讨论】:

  • 如果由于某种原因无法在不存在limit_area 的情况下使用pandas 0.23.0,这是一个很好的解决方案。我希望使用limit_area 参数的解决方案可能有更好的性能?
猜你喜欢
  • 1970-01-01
  • 2021-04-20
  • 2015-09-28
  • 2015-06-10
  • 2017-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多