微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将缺失的时间戳行添加到数据帧

如何解决将缺失的时间戳行添加到数据帧

我有一个数据框,其中包含每天以两小时为间隔测量的数据,但是缺少一些时间间隔。我的数据集如下所示:

if(!store.state.AppActiveUser.is_customer){
        if (!to.Meta.authrequired && auth.isAuthenticated()) {
            router.push({ path: '/dashboard',name: 'dashboard',component: './views/DashboardAnalytics.vue' })
        }
    }else{
    if (!to.Meta.authrequired && auth.isAuthenticated()) {
        router.push({ path: '/customer/dashboard',name: 'customer-dashboard',component: '@/views/apps/customerComponents/dashboard/DashboardAnalytics.vue' })
    }

我正在尝试插入缺失的时间间隔并用 Nan 填充它们的值。

2020-12-01 08:00:00 145.9
2020-12-01 10:00:00 100.0
2020-12-01 16:00:00 99.3
2020-12-01 18:00:00 91.0

我将感谢有关如何在 python 中实现这一目标的任何帮助,因为我是一个刚开始使用 python 的新手

解决方法

创建 DatetimeIndex 并使用 DataFrame.asfreq

print (df)

                  date    val
0  2020-12-01 08:00:00  145.9
1  2020-12-01 10:00:00  100.0
2  2020-12-01 16:00:00   99.3
3  2020-12-01 18:00:00   91.0

df['date'] = pd.to_datetime(df['date'])

df = df.set_index('date').asfreq('2H')

print (df)
                       val
date                      
2020-12-01 08:00:00  145.9
2020-12-01 10:00:00  100.0
2020-12-01 12:00:00    NaN
2020-12-01 14:00:00    NaN
2020-12-01 16:00:00   99.3
2020-12-01 18:00:00   91.0
,

您可以尝试以下操作:

我为此使用了 datetime 和 timedelta,

from datetime import datetime,timedelta

# Asuming that the data is given like below.
data = ['2020-12-01 08:00:00 145.9','2020-12-01 10:00:00 100.0','2020-12-01 16:00:00 99.3','2020-12-01 18:00:00 91.0']

# initialize the start time using data[0]
date = data[0].split()[0].split('-')
time = data[0].split()[1].split(':')
start = datetime(int(date[0]),int(date[1]),int(date[2]),int(time[0]),int(time[1]),int(time[2]))

newdata = []
newdata.append(data[0])

i = 1
while i < len(data):
    cur = start
    nxt = start + timedelta(hours=2)
    
    if (str(nxt) != (data[i].split()[0] + ' ' + data[i].split()[1])):
        newdata.append(str(nxt) + ' NaN')
    else:
        newdata.append(data[i])
        i+=1
        
    start = nxt
    
newdata

注意: temedelta(hours=2) 会将现有时间增加 2 小时。

,

假设你的 df 看起来像

              datetime  value
0  2020-12-01T08:00:00  145.9
1  2020-12-01T10:00:00  100.0
2  2020-12-01T16:00:00   99.3
3  2020-12-01T18:00:00   91.0

确保 datetime 列是 dtype datetime;

df['datetime'] = pd.to_datetime(df['datetime'])

以便您现在可以重新采样到每 2 小时一次的频率:

df.resample('2H',on='datetime').mean()

                     value
datetime                  
2020-12-01 08:00:00  145.9
2020-12-01 10:00:00  100.0
2020-12-01 12:00:00    NaN
2020-12-01 14:00:00    NaN
2020-12-01 16:00:00   99.3
2020-12-01 18:00:00   91.0

请注意,如果您的 df 已有日期时间索引,则不需要设置 on= 关键字。重采样产生的 df 将有一个日期时间索引。

另请注意,我使用 .mean() 作为 aggfunc,这意味着如果您在两个小时的时间间隔内有多个值,您将获得平均值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。