熊猫使用特定值向前填充“时间戳”列(1秒)

时间:2019-01-30 13:17:48

标签: python pandas

我有一个pandas.Series之类的

Timestamp_data:
0   2018-09-26 04:38:32.544 
1   NaT
2   NaT
3   NaT
4   2018-09-26 04:58:32.544
5   NaT

我想从以前的可用内容中连续向每个NaT添加1秒:

    Timestamp_data:
0   2018-09-26 04:38:32.544 
1   2018-09-26 04:39:32.544
2   2018-09-26 04:40:32.544
3   2018-09-26 04:41:32.544
4   2018-09-26 04:58:32.544
5   2018-09-26 04:59:32.544

该帖子是这样的:

  

Fill na values by adding x to previous row pandas

但是在当前的numpy版本中,np.diff()对于布尔型具有TypeError。

1 个答案:

答案 0 :(得分:2)

您只能使用cumcountto_timedelta为连续缺少的日期时间创建时间增量,因为仅过滤器添加了此行reindex来填充现有数据的0 timedelta

最后一次填充NaT并添加新的Series

print (df)
           Timestamp_data
0 2018-09-26 04:25:32.544
1 2018-09-26 04:38:32.544
2                     NaT
3                     NaT
4                     NaT
5 2018-09-26 04:58:32.544
6                     NaT

m = df['Timestamp_data'].notna()
#old pandas alternative
#m = df['Timestamp_data'].notnull()

s = (pd.to_timedelta(df[~m].groupby(m.cumsum()).cumcount() + 1, unit='s')
       .reindex(df.index, fill_value=0))

最后60的最后一秒乘以1分钟:

df['Timestamp_data'] = df['Timestamp_data'].ffill()  + s * 60

print (df)
           Timestamp_data
0 2018-09-26 04:25:32.544
1 2018-09-26 04:38:32.544
2 2018-09-26 04:39:32.544
3 2018-09-26 04:40:32.544
4 2018-09-26 04:41:32.544
5 2018-09-26 04:58:32.544
6 2018-09-26 04:59:32.544

一秒钟只能删除60的倍数:

df['Timestamp_data'] = df['Timestamp_data'].ffill()  + s 
print (df)
           Timestamp_data
0 2018-09-26 04:25:32.544
1 2018-09-26 04:38:32.544
2 2018-09-26 04:38:33.544
3 2018-09-26 04:38:34.544
4 2018-09-26 04:38:35.544
5 2018-09-26 04:58:32.544
6 2018-09-26 04:58:33.544