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

Python解析仿真输出转DataFrame写入Excel缺失行名怎么解决

解决方案

你的核心问题是当前代码仅提取了每行的数值,没有保留F100.T这类字段中.后面的指标名称,也没有将这些名称设置为DataFrame的行索引。以下是修改后的可直接运行的代码:

import pandas as pd

def parse_line(line: str) -> tuple:
    # 先按逗号拆分整行
    line_parts = line.strip().split(',')
    # 第一个字段拆分设备名和指标名
    device, metric = line_parts[0].split('.')
    # 只保留需要的设备和对应数值
    if device in ('F100', 'F200'):
        return device, metric, float(line_parts[1])
    return None

with open("sim.txt", encoding='utf-8') as data:
    # 解析所有有效行
    parsed_data = []
    for line in data:
        line = line.strip()
        if not line:
            continue
        res = parse_line(line)
        if res:
            parsed_data.append(res)
    # 转成三列的临时DataFrame
    temp_df = pd.DataFrame(parsed_data, columns=['device', 'metric', 'value'])
    # 透视转换为目标格式
    df = temp_df.pivot(index='metric', columns='device', values='value')
    # 重置列名,去掉多余层级
    df.columns.name = None
    # 输出和写入Excel,注意index=True保留行索引(就是T、Tv这些指标名)
    print(df)
    df.to_excel("table.xlsx", index=True, index_label='')

主要改动说明

  • 调整了parse_line的逻辑,拆分每行第一个字段同时获取设备名(F100/F200)、指标名(T/Tv/Tl等)和对应数值,避免了你原来用空格拆分的逻辑隐患(你的原始日志行无空格,原有拆分逻辑实际是冗余的)
  • 先将所有解析结果存为三列的临时DataFrame,再用pivot方法直接转换为你需要的行是指标、列是设备的表格结构
  • 写入Excel时设置index=True保留行索引,index_label=''避免索引列多出不必要的表头

如果你不想大改原有代码逻辑,也可以在原有基础上新增提取指标名的逻辑:在解析F100开头的行时,顺便把.后的指标名存到单独的列表里,最后把这个列表设为DataFrame的index即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:36:08