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

如何生成1小时间隔时间索引并为缺失时段填充随机完整数据行

实现代码

先修正你原有代码的逻辑问题,你之前写的df.join(df)属于笔误,且流程繁琐,以下是直接实现需求的完整代码:

import pandas as pd
import numpy as np

# 处理原始时间列,统一按小时取整
df['datetime'] = df['datetime'].dt.floor('H')
# 生成覆盖整个周期的完整小时时间序列
full_hours = pd.date_range(df['datetime'].min(), df['datetime'].max(), freq='H')
# 筛选出没有数据的缺失小时
missing_hours = full_hours[~full_hours.isin(df['datetime'].unique())]

# 构建采样池:提取原始数据中所有非空的完整行,先把空字符串转成NaN统一处理
df = df.replace('', np.nan)
sample_pool = df.dropna(subset=df.columns.difference(['datetime']))

# 为每个缺失小时生成100条填充数据
fill_list = []
for dt in missing_hours:
    # 从采样池随机抽取100行,允许重复采样适配采样池不足100行的场景
    sampled = sample_pool.sample(n=100, replace=True, random_state=42).copy()
    # 统一替换为当前缺失的小时,不修改其他列内容
    sampled['datetime'] = dt
    fill_list.append(sampled)

# 合并原始数据与填充数据,按时间排序得到最终结果
df_result = pd.concat([df, pd.concat(fill_list)], ignore_index=True).sort_values('datetime').reset_index(drop=True)

注意说明

  • pandas官方小时频率标识为H,不要使用HR避免报错
  • 代码中random_state=42用于固定随机采样结果,不需要复现结果可直接删除该参数
  • 如果原始数据本身没有空字符串占位的缺失行,可删除df = df.replace('', np.nan)这行代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 18:18:04