我有一个熊猫数据框,其中缺少一些时间戳,这些时间戳以每分钟一分钟的间隔定期隔开,如下所示
df
time value
2020-03-04 17:00:00 -0.923
2020-03-04 17:01:00 -0.829
....
问题在于,在某些地方缺少time
列(value
列没有缺失值)。
2020-03-04 22:08:00 0.023
NaN 0.039
NaN 0.104
2020 03-04 22:11:00 0.192
如何在NaN
列中向前填充time
,以使它们正确地增加每一行的时间?使用上面的示例所需的输出看起来像
2020-03-04 22:08:00 0.023
2020-03-04 22:09:00 0.039
2020-03-04 22:10:00 0.104
2020 03-04 22:11:00 0.192
答案 0 :(得分:2)
使用Series.interpolate
转换为本机格式-Unix时间:
df['date'] = (pd.to_datetime(df['date'].dropna()
.astype(np.int64)
.reindex(df.index).interpolate()))
print (df)
date col
0 2020-03-04 22:08:00 0.023
1 2020-03-04 22:09:00 0.039
2 2020-03-04 22:10:00 0.104
3 2020-03-04 22:11:00 0.192
答案 1 :(得分:1)
一种可能的方法是将数据转换为浮点数,插值并转换回:
# convert to datetime if not already is
df['time'] = pd.to_datetime(df['time'])
old_time = pd.to_datetime('1970-01-01')
interpolated = df['time'].sub(old_time).dt.total_seconds().interpolate()
df['time'] = pd.to_timedelta(interpolated, unit='s') + old_time
输出:
time value
0 2020-03-04 22:08:00 0.023
1 2020-03-04 22:09:00 0.039
2 2020-03-04 22:10:00 0.104
3 2020-03-04 22:11:00 0.192