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

Python Pandas文件解析:" "分隔仿真结果的多维度处理与拆分

拆分仿真结果的两种解决方案

嘿,针对你拆分仿真结果的需求,我给你准备了两种靠谱的方案,分别对应Pandas添加维度和按固定行数拆分numpy数组的需求,一起来看看~

方法一:给Pandas DataFrame添加维度(用块标记实现)

因为你的数据是用空行分隔不同仿真结果,首先得先识别每个仿真块,然后给数据加上仿真ID作为新维度,这样就能轻松区分不同的仿真结果了:

  1. 读取并预处理数据,标记每个仿真块的ID
import pandas as pd

# 读取原始文本文件
with open('your_simulation_data.txt', 'r') as f:
    lines = f.readlines()

# 遍历每行,给每个仿真块分配唯一ID(空行触发新块)
block_id = 0
block_ids = []
for line in lines:
    if line.strip() == '':  # 空行表示新的仿真结果开始
        block_id += 1
    block_ids.append(block_id)

# 过滤掉空行,把有效数据转成DataFrame
filtered_lines = [line for line in lines if line.strip() != '']
df = pd.read_csv(pd.io.common.StringIO(''.join(filtered_lines)), sep='\s+')

# 给DataFrame添加仿真ID列,作为新维度
df['simulation_id'] = block_ids[:len(df)]
  1. 可选:转成多层索引结构
    如果想让维度更清晰,可以把simulation_id设为第一层索引,这样每个仿真结果就是一个子DataFrame:
# 设置多层索引,方便按仿真块提取数据
df_multi_index = df.set_index(['simulation_id', df.index])

# 提取第一个仿真块的数据示例
first_simulation_data = df_multi_index.loc[0]

这种方法的好处是,就算某个仿真块的行数不是固定8行,也能准确拆分,容错性更高。

方法二:按每8行拆分成numpy数组

如果每个仿真结果正好固定是8行,那直接转成numpy数组后reshape就非常高效:

  1. 读取数据并转成numpy数组
import pandas as pd
import numpy as np

# 读取数据时跳过空行
df = pd.read_csv('your_simulation_data.txt', sep='\s+', skip_blank_lines=True)

# 把DataFrame转成numpy数组
data_array = df.to_numpy()
  1. 按每8行拆分三维数组
# 计算总共有多少个完整的仿真块
total_blocks = len(data_array) // 8

# 把数组reshape成三维结构:(仿真块数量, 每块行数, 列数)
split_simulations = data_array[:total_blocks*8].reshape(total_blocks, 8, -1)

# 提取第一个仿真块的数组示例
first_sim_block = split_simulations[0]

注意:如果你的数据里存在不完整的仿真块(最后一块不足8行),上面的代码会自动忽略这部分,你可以根据需求调整是否保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:09:55