在Python中如何插值/外推缺失的日期?

4

假设我有以下数据框:

bb = pd.DataFrame(data = {'date' :['','','','2015-09-02', '2015-09-02', '2015-09-03','','2015-09-08', '', '2015-09-11','2015-09-14','','' ]})     
bb['date'] = pd.to_datetime(bb['date'], format="%Y-%m-%d")     

我希望能够线性插值和外推来填充缺失的日期数值。我使用了以下代码,但似乎没有任何变化。我对Pandas不是很熟悉,请帮忙看看。

bb= bb.interpolate(method='time')

你想如何插值?你想填补所有缺失的日期还是只填补那些空白的空间? - Eular
我想进行线性插值。谢谢。 - areddy
@Eular日期应该进行线性插值。谢谢。 - areddy
1个回答

3
要进行外推,您需要使用bfill()ffill()。缺失的值将由后面(或前面)的值分配。
要进行线性插值,您需要使用函数interpolate,但是日期需要转换为数字:
import numpy as np
import pandas as pd
from datetime import datetime

bb = pd.DataFrame(data = {'date' :['','','','2015-09-02', '2015-09-02', '2015-09-03','','2015-09-08', '', '2015-09-11','2015-09-14','','' ]})     
bb['date'] = pd.to_datetime(bb['date'], format="%Y-%m-%d")     

# convert to seconds
tmp = bb['date'].apply(lambda t: (t-datetime(1970,1,1)).total_seconds())
# linear interpolation
tmp.interpolate(inplace=True)    
# back convert to dates
bb['date'] = pd.to_datetime(tmp, unit='s') 
bb['date'] = bb['date'].apply(lambda t: t.date())
# extrapolation for the first missing values
bb.bfill(inplace='True')

print bb

结果:

         date
0  2015-09-02
1  2015-09-02
2  2015-09-02
3  2015-09-02
4  2015-09-02
5  2015-09-03
6  2015-09-05
7  2015-09-08
8  2015-09-09
9  2015-09-11
10 2015-09-14
11 2015-09-14
12 2015-09-14

谢谢@Stanley,但是在第7行,值不能是2015-09-09吗? - areddy
不,你必须将这种行为编写成代码。请参考上面的代码更改。 - Serenity

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接