读取含多重复表头与多数据段的文本文件的高效方法
高效处理带重复表头的多ID制表符文本文件
解决方案(Python + Pandas)
直接用Pandas逐行解析,无需繁琐预处理,步骤如下:
- 读取原始文件,不指定表头,按制表符分割所有行
- 遍历识别关键行:标记当前ID,跳过重复的表头/单位行
- 构建统一数据集:将数据行与对应ID绑定,最终生成目标DataFrame
import pandas as pd import numpy as np # 读取文件,按制表符分割,不设表头 raw_data = pd.read_csv("your_file.txt", sep="\t", header=None, keep_default_na=False) current_id = None processed_rows = [] for _, row in raw_data.iterrows(): # 识别ID行,提取唯一ID(取该行第二个元素,跳过重复值) if str(row[0]).startswith("IDS:"): current_id = row[1] continue # 跳过表头行和单位说明行 if str(row[0]) in ["Date/Time", "yyy-mm-dd H:M:S"]: continue # 处理数据行:拼接ID+数据,替换文本NA为np.nan data_row = [current_id] + [np.nan if val == "NA" else val for val in row.values] processed_rows.append(data_row) # 转换为DataFrame并设置列名 final_df = pd.DataFrame(processed_rows, columns=["ID", "Datetime", "L", "A", "Z"]) # 转换数据类型:时间列转datetime,数值列转float final_df["Datetime"] = pd.to_datetime(final_df["Datetime"]) final_df[["L", "A", "Z"]] = final_df[["L", "A", "Z"]].astype(float) print(final_df)
代码说明
- 读取文件时用
keep_default_na=False避免提前将"NA"识别为缺失值,方便后续统一处理 - 识别ID行时直接取第二个元素,因为示例中ID重复出现,无需额外去重
- 跳过固定的表头和单位行,无需复杂逻辑判断
- 最后统一转换数据类型,保证数据集的规范性
运行后输出的DataFrame结构示例:
| ID | Datetime | L | A | Z |
|---|---|---|---|---|
| df-1 | 2022-04-28 13:30:00 | NaN | 0.000 | NaN |
| df-1 | 2022-04-28 13:45:00 | NaN | 2.968 | NaN |
| df-1 | 2022-04-28 14:00:00 | 2.427 | 3.124 | 22.818 |
| dat-2 | 2022-04-29 10:15:00 | 1.352 | 2.137 | 5.552 |
| dat-2 | 2022-04-29 10:30:00 | 1.365 | 2.303 | 6.065 |
内容的提问来源于stack exchange,提问作者M--
相关产品推荐
相关产品推荐

