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
相关产品推荐
相关产品推荐

