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

