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

提取文本文件B=行至CSV时填充缺失值的代码修改求助

处理含缺失值的B=行提取与CSV生成

现有文本文件包含多组如下格式内容:

G=
rtc={22/06/30,18:32:30}
B=52,12,13,4,T=421,29,29,4
Ba=28.32,Bs=15.26,Br=1.38,1.96,2.00,3.39
Ns=286,Nf=117,A=0,1,E=0

需要提取所有以B=开头的行,生成表头为B1, B2, B3, B4, T1, T2, T3, T4的CSV文件。但原数据部分目标行数值不足8个,存在缺失值,需修改代码在缺失位置填充nan,避免触发IndexError: list index out of range错误,替换原代码else块的pass语句。

原代码

def attrs_reader(file, attrs_columns):

    csvReader = csv.reader(file)
    list_of_lists = []
    for line in csvReader:
        if len(line) == len(attrs_columns):
            list_of_lists.append([
                re.sub('B=', '', line[0]), line[1], line[2], line[3],
                re.sub('T=', '', line[4]), line[5], line[6], line[7]
            ])
        else:
            pass

    data = []
    for i, lst in enumerate(list_of_lists):
        data.append(lst)
    df_attrs = pd.DataFrame(data, columns=attrs_columns)

    return df_attrs

修改后的代码

核心逻辑:统一处理每行的前缀,再将列表补全到目标长度,缺失位置填充缺失值标识。

import pandas as pd
import re
import csv

def attrs_reader(file, attrs_columns):
    csvReader = csv.reader(file)
    list_of_lists = []
    target_length = len(attrs_columns)  # 固定为8
    
    for line in csvReader:
        # 先处理所有元素,移除B=和T=前缀
        processed_items = []
        for item in line:
            if item.startswith('B='):
                processed_items.append(re.sub('B=', '', item))
            elif item.startswith('T='):
                processed_items.append(re.sub('T=', '', item))
            else:
                processed_items.append(item)
        
        # 补全到目标长度,缺失位置填充pd.NA(pandas标准缺失值)
        if len(processed_items) < target_length:
            processed_items += [pd.NA] * (target_length - len(processed_items))
        # 若元素过多,截断至目标长度(按需保留)
        elif len(processed_items) > target_length:
            processed_items = processed_items[:target_length]
        
        list_of_lists.append(processed_items)
    
    # 直接用处理后的列表构造DataFrame
    df_attrs = pd.DataFrame(list_of_lists, columns=attrs_columns)
    return df_attrs

关键优化点

  • 不再依赖行长度判断前缀处理,确保所有含B=/T=的元素都能被正确清洗
  • 自动补全缺失值,彻底避免索引越界错误
  • 移除冗余的data列表生成步骤,简化代码逻辑
  • 用pd.NA替代普通nan,更贴合pandas的缺失值处理规范

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:35:28