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

如何用Python正确加载含折列的多列数据并提取目标列?

问题描述

我有一个共7列的数据文件:1列时间列 + 6列数据列。数据格式特殊:

  • 每行起始为时间列,后跟4列数据;
  • 剩余2列数据被折行到下一行,行首带红色项目符号(作为换行标记),随后重复对应时间列,再跟原第5、6列数据。

尝试用Python的np.loadtxt加载时遇到问题:

  • 执行data = np.loadtxt('temp_59324.dat',delimiter = None)直接报错;
  • 仅指定加载5列(1时间+4数据)时能正常加载,但设置其他列数都会报错。

需求:

  1. 正确加载该格式的数据;
  2. 提取原数据的第5、6列;
  3. 方法需能推广到400列的场景(即每行先输出部分列,剩余列多次折行,每行带标记+重复时间列)。

补充:之前尝试的方案因代码中标记符号与文件实际符号不符,未生效;可获取目标数据文件。


解决方案

核心思路

文件中每一组完整数据对应两行:

  1. 第一行:时间 数据1 数据2 数据3 数据4
  2. 第二行:[特殊标记] 时间 数据5 数据6

处理逻辑:

  • 逐行读取,将相邻两行配对;
  • 去除第二行的特殊标记和重复时间列;
  • 合并两行数据为完整的时间 数据1-6格式;
  • 转换为数值数组,方便后续列提取。

代码实现

步骤1:读取并预处理数据

import numpy as np

# 读取文件,过滤空行并去除首尾空白
with open('temp_59324.dat', 'r', encoding='utf-8') as f:
    lines = [line.strip() for line in f if line.strip()]

# 每两行一组合并为完整数据行
full_data = []
for i in range(0, len(lines), 2):
    # 拆分第一行数据
    line1 = lines[i].split()
    # 拆分第二行:去掉标记和重复时间,取剩余数据列
    line2 = lines[i+1].split()[2:]
    # 合并为完整的一行数据
    combined = line1 + line2
    # 转换为数值类型
    full_data.append([float(val) for val in combined])

# 转为numpy数组
data_array = np.array(full_data)

步骤2:提取目标列

data_array的列顺序为:时间列, 数据1, 数据2, 数据3, 数据4, 数据5, 数据6,提取原第5、6列(对应数组索引5、6):

# 提取原第5、6列
col5 = data_array[:, 5]
col6 = data_array[:, 6]

# 示例输出
print("第5列前5行:", col5[:5])
print("第6列前5行:", col6[:5])

推广到400列场景

如果是1时间列+399数据列,且需要多次折行(比如每3行一组完整数据),只需调整分组逻辑:

import numpy as np

with open('large_data.dat', 'r', encoding='utf-8') as f:
    lines = [line.strip() for line in f if line.strip()]

# 每组行数根据实际折行次数设置,比如3行一组
group_size = 3
full_data = []
for i in range(0, len(lines), group_size):
    # 取第一行的时间+前N列数据
    combined = lines[i].split().copy()
    # 遍历后续折行,合并数据
    for j in range(1, group_size):
        # 去掉标记和重复时间,合并剩余数据
        combined.extend(lines[i+j].split()[2:])
    # 转为数值
    full_data.append([float(val) for val in combined])

data_array = np.array(full_data)

注意事项

  • 如果读取文件出现乱码,尝试修改encoding参数(如encoding='gbk');
  • 若特殊标记位置不固定,先打印lines[:5]查看行结构,调整分割逻辑;
  • 超大文件可采用逐行处理、边读边存的方式,避免内存占用过高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:55:55