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

如何在Pandas中补全非标准24小时时间戳的缺失数据?

补全时间序列缺失记录的解决方案

Pandas 实现方案

先确认现有时间戳的范围,生成连续完整的时间戳序列,再与原数据左连接填充缺失值:

import pandas as pd

# 获取时间戳边界,生成完整连续序列
min_ts = df['timestamp(24hrs)'].min()
max_ts = df['timestamp(24hrs)'].max()
full_ts = pd.DataFrame({'timestamp(24hrs)': range(min_ts, max_ts + 1)})

# 左连接原数据,填充缺失的count为0
df_complete = pd.merge(full_ts, df, on='timestamp(24hrs)', how='left').fillna({'count': 0})

如果timestamp(24hrs)是datetime格式,可改用pd.date_range生成连续时间序列:

full_ts = pd.DataFrame({'timestamp(24hrs)': pd.date_range(start=min_ts, end=max_ts, freq='H')})

Spark 修正实现方案

针对你之前尝试Spark未成功的情况,可通过生成连续序列+左连接的方式补全:

from pyspark.sql import SparkSession
from pyspark.sql.functions import explode, sequence

spark = SparkSession.builder.appName("FillMissingTimeSeries").getOrCreate()

# 获取时间戳的最小、最大值
ts_bounds = df.selectExpr("min(`timestamp(24hrs)`)", "max(`timestamp(24hrs)`)" ).collect()[0]
min_ts, max_ts = ts_bounds[0], ts_bounds[1]

# 生成完整连续时间戳序列
full_ts_df = spark.sql(f"SELECT explode(sequence({min_ts}, {max_ts}, 1)) AS `timestamp(24hrs)`")

# 左连接原数据并填充缺失count为0
df_complete = full_ts_df.join(df, on='timestamp(24hrs)', how='left') \
                        .fillna(0, subset=['count'])

注意事项

  • 若timestamp(24hrs)是字符串/日期类型,需先转换为数值型时间戳,或调整序列生成逻辑:
    # 示例:针对datetime类型的时间戳
    full_ts_df = spark.sql("""
        SELECT explode(sequence(to_timestamp(min_ts), to_timestamp(max_ts), interval 1 hour)) 
        AS `timestamp(24hrs)`
    """)
    
  • 确保原表与生成的序列表中timestamp(24hrs)的类型完全一致,避免连接失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 11:16:56