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

如何补全光伏逆变器API返回的指定时段缺失数据?

数据补全方案

核心思路

  1. 按日期拆分数据,单独处理每一天的记录
  2. 生成当天4:00到21:00的完整时间序列(匹配原始数据的时间间隔)
  3. 分两段填充缺失值:4:00-6:00的缺失值填0;当日现有最后一条记录到21:00的缺失值填当日day_power的最大值
  4. 合并所有日期的补全数据,得到最终结果

具体实现步骤(以Python Pandas为例)

1. 预处理原始数据

先把DateTime列转为datetime类型,提取日期作为分组依据:

import pandas as pd

# 假设原始数据存储在df中,包含DateTime和day_power列
df['DateTime'] = pd.to_datetime(df['DateTime'])
df['date'] = df['DateTime'].dt.date

2. 按日期分组处理

遍历每个日期的数据,生成目标时间范围的完整序列并填充:

filled_dfs = []
# 按日期分组处理每一天的数据
for date, group in df.groupby('date'):
    # 生成当天4:00到21:00的完整时间序列,freq参数需匹配原始数据的时间间隔(示例为15分钟)
    start_time = pd.Timestamp(date) + pd.Timedelta(hours=4)
    end_time = pd.Timestamp(date) + pd.Timedelta(hours=21)
    full_time_range = pd.date_range(start=start_time, end=end_time, freq='15min')
    
    # 将分组数据转为DateTime索引,方便合并
    group = group.set_index('DateTime')
    # 合并完整时间序列与原始数据,得到带缺失值的数据集
    merged = pd.DataFrame(index=full_time_range).join(group)
    
    # 填充4:00-6:00的缺失值为0
    morning_mask = (merged.index.hour >= 4) & (merged.index.hour < 6)
    merged.loc[morning_mask, 'day_power'] = merged.loc[morning_mask, 'day_power'].fillna(0)
    
    # 获取当日现有数据的最后一条记录时间,填充后续缺失值为当日day_power最大值
    last_record_time = group.index.max()
    evening_mask = merged.index > last_record_time
    max_day_power = group['day_power'].max()
    merged.loc[evening_mask, 'day_power'] = merged.loc[evening_mask, 'day_power'].fillna(max_day_power)
    
    # 重置索引并整理列名
    merged = merged.reset_index().rename(columns={'index': 'DateTime'})
    filled_dfs.append(merged)

# 合并所有日期的补全数据
final_df = pd.concat(filled_dfs, ignore_index=True)

3. 注意事项

  • 时间间隔参数freq需与原始数据一致,比如原始数据为1小时一次则设为'H',5分钟一次则设为'5min'
  • 若某天无任何原始记录,需额外处理:4:00-6:00填0,6:00-21:00可根据业务需求补充(如填0或默认值)
  • 若某天所有day_power均为缺失值,最大值会返回NaN,需单独判断处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 20:24:31