You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现Kairos的GAPS算子:采样窗口有数据时勿生成NaN

解决Kairos GAPS算子的Pandas实现问题

首先明确核心需求:按指定采样频率(比如1小时)划分时间窗口,仅当窗口内完全没有数据点时,才在窗口起始位置插入NaN;若窗口内已有数据,则不生成该窗口的NaN点。你的问题出在当前代码可能直接生成了全量采样序列并合并,导致即使窗口有数据也保留了窗口起始的空值。

具体解决方案步骤

  1. 规整原始数据:确保时间列是datetime类型并设为索引,完成排序。
  2. 生成覆盖数据时间范围的所有采样窗口起始时间。
  3. 筛选出完全没有数据的空窗口。
  4. 仅为空窗口生成NaN数据,再与原始数据合并排序。

可运行代码示例

import pandas as pd
import numpy as np

# 原始数据
raw_data = pd.DataFrame({
    'timestamp': ['2023-07-20 01:40:00', '2023-07-20 01:50:10'],
    'value': [20, 25]
})

# 数据预处理:转datetime格式、设置索引、排序
raw_data['timestamp'] = pd.to_datetime(raw_data['timestamp'])
data = raw_data.set_index('timestamp').sort_index()

# 定义采样频率(此处为1小时,可按需修改)
sample_freq = '1H'

# 生成覆盖数据时间范围的所有采样窗口起始点
min_window = data.index.min().floor(sample_freq)
max_window = data.index.max().floor(sample_freq)
all_windows = pd.date_range(start=min_window, end=max_window, freq=sample_freq)

# 标记已有数据的窗口
data['window_start'] = data.index.floor(sample_freq)
existing_windows = data['window_start'].unique()

# 筛选出无数据的空窗口
empty_windows = all_windows[~all_windows.isin(existing_windows)]

# 为空窗口生成NaN数据
nan_records = pd.DataFrame({'value': np.nan}, index=empty_windows)

# 合并原始数据与NaN数据,整理最终结果
final_result = pd.concat([data.drop('window_start', axis=1), nan_records])
final_result = final_result.sort_index().reset_index().rename(columns={'index': 'timestamp'})

print(final_result)

代码说明

  • 这段代码只会在完全没有数据的采样窗口插入NaN,比如若数据中没有02:00-03:00窗口的任何数据,才会生成2023-07-20 02:00:00的NaN点。
  • 对于已有数据的窗口(比如01:00-02:00),只会保留原始的01:40:00和01:50:10数据点,不会额外生成窗口起始的NaN。

内容的提问来源于stack exchange,提问作者nkstack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 09:43:16