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

Python如何将单列按时间戳分组的数据转换为多列结构?

Python实现单列时间戳观测值转多列结构

实现思路

  • 逐行读取原始单列数据,区分时间戳行和观测值行
  • 识别到时间戳时,将其作为新的列名,初始化对应观测值存储列表
  • 后续非时间戳的行均作为观测值存入当前列对应的列表,直到识别到下一个时间戳
  • 全部数据处理完成后,将存储的映射关系转换为表格结构即可

代码示例

基础版本(适配示例数据规则)

import pandas as pd

# 若数据存储在txt文件中,可替换为下方读取代码:
# raw_data = pd.read_csv("你的文件路径.txt", header=None, squeeze=True).tolist()
raw_data = [
    "Datetime stamp 1",
    "Obs1",
    "Obs2",
    "Obs3",
    "Datetime stamp 2",
    "Obs1",
    "Obs2",
    "Obs3"
]

# 存储 列名:观测值列表 映射
col_mapping = {}
current_col = None

for line in raw_data:
    line = line.strip()
    if not line:
        continue
    # 识别时间戳行,可根据实际时间格式调整判断规则
    if line.startswith("Datetime stamp"):
        current_col = line
        col_mapping[current_col] = []
        continue
    # 存入当前列的观测值列表
    if current_col:
        col_mapping[current_col].append(line)

# 转换为DataFrame,自动对齐各列长度
result_df = pd.DataFrame(col_mapping)

# 打印结果,也可通过result_df.to_csv("输出路径.csv", index=False)导出为文件
print(result_df)

自定义时间格式校验版本

如果你的时间戳不是固定开头,而是标准时间格式,可替换时间戳识别逻辑:

from datetime import datetime

# 替换上述代码中的if line.startswith("Datetime stamp")判断块
try:
    # 括号内的格式字符串替换为你实际的时间格式,比如"%Y/%m/%d %H:%M"等
    datetime.strptime(line, "%Y-%m-%d %H:%M:%S")
    current_col = line
    col_mapping[current_col] = []
except ValueError:
    pass

输出结果

运行上述代码后得到的输出和要求的结构完全一致:

Datetime stamp 1 Datetime stamp 2
0             Obs1             Obs1
1             Obs2             Obs2
2             Obs3             Obs3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:39:00