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

将Time&Date列内独立日期行及后续AM/PM时间转换为完整Timestamp列

拆分存储结构时间日期列转标准时间戳处理方案

问题特征

这类非结构化表格是经济数据日历类导出文件的常见格式,核心的拆分存储规则为:

  • Time & Date列未逐行填充完整时间,而是按“日期-明细”的层级拆分存储
  • 层级顶部的日期标识行:
    • Time & Date存储完整自然日文本,示例格式为Tuesday April 02 2019
    • Country字段为空值(NaN)
    • Consensus、Forecast字段为重复的表头文本,无实际业务值
  • 日期行下方关联的明细数据行:
    • Time & Date仅存储带AM/PM标识的12小时制时间,示例格式为4:00 PM、7:00 AM
    • Country、Consensus、Forecast等业务字段为实际填充的有效数据

处理逻辑

通过向下继承日期值的方式完成时间字段的补全,最终生成逐行对应的高精度时间戳:

  1. 逐行遍历表格记录,识别所有日期标识行
  2. 遇到日期行时,将该行的自然日文本解析为日期值,作为后续明细行的继承基准,遇到下一个日期行时再更新该基准值
  3. 跳过所有无实际业务值的日期标识行,不对其做数据保留
  4. 对每一条有效明细行,将继承到的自然日值与该行自身存储的时间文本拼接,转换为带年、月、日、时、分精度的标准Timestamp对象

参考实现代码(基于Pandas)

import pandas as pd

current_effective_date = None
generated_timestamp_list = []

for _, row in raw_df.iterrows():
    # 识别日期行:Country字段为空
    if pd.isna(row["Country"]):
        # 解析该行存储的完整日期文本
        current_effective_date = pd.to_datetime(row["Time & Date"]).date()
        continue
    # 拼接有效明细行的完整时间字符串
    full_time_text = f"{current_effective_date} {row['Time & Date']}"
    # 转换为标准Timestamp,适配12小时制+AM/PM的格式
    parsed_timestamp = pd.to_datetime(full_time_text, format="%Y-%m-%d %I:%M %p")
    generated_timestamp_list.append(parsed_timestamp)

# 过滤无效行,绑定生成的时间戳列
valid_df = raw_df.dropna(subset=["Country"]).reset_index(drop=True)
valid_df["Timestamp"] = generated_timestamp_list

关键注意点

  • 解析带AM/PM的12小时制时间时,必须使用%I格式占位符对应12小时制小时位,不要误用24小时制的%H,否则会出现时间解析偏移
  • 遍历过程中需要对孤立的无日期关联的时间行做异常校验,避免错误继承跨天的旧日期值
  • 最终输出前需要二次校验时间戳的连续性,避免因为表格排序错位导致日期继承错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 20:27:04