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

如何读取带分组标识的file.txt并生成含Group列的DataFrame

解决按分组标记读取文本生成带Group列的DataFrame问题

问题描述

现有file.txt文件内容如下:

///// A
13 32 12 13
4 22 34 42    
///// B
3 1 34 11
0 NaN 21 1
44 32 33 32  
///// C
5 32 11 21
43 23 NaN 3

需要读取该文件,将数据按/////后的字母分组,生成包含Group列的DataFrame,格式如下:

0   1     2   3 Group
13  32    12  13     A
4   22    34  42     A
3   1     34  11     B
0   NaN   21  1      B
44  32    33  32     B
5   32    11  21     C
43  23    NaN 3      C

使用pd.read_table时,仅能通过comment='/'参数忽略分组行,无法将数据与对应分组关联,需要可行的解决方案。

解决方案

方法一:逐行解析文件

手动逐行读取文件,识别分组标记并记录当前分组,再收集对应数据行,最后转换为DataFrame:

import pandas as pd

data_rows = []
current_group = None

with open('file.txt', 'r') as f:
    for line in f:
        stripped_line = line.strip()
        # 跳过空行
        if not stripped_line:
            continue
        # 识别分组行,提取分组名称
        if stripped_line.startswith('/////'):
            current_group = stripped_line.split()[-1]
            continue
        # 处理数据行,拆分后添加分组信息
        split_data = stripped_line.split()
        # 转换数值,将字符串NaN转为pandas可识别的缺失值
        processed_data = [float(x) if x != 'NaN' else pd.NA for x in split_data]
        data_rows.append(processed_data + [current_group])

# 转换为目标DataFrame
result_df = pd.DataFrame(data_rows, columns=[0, 1, 2, 3, 'Group'])
print(result_df)

方法二:利用pandas文本读取+分组填充

先读取所有内容,再通过标记行识别分组并向前填充分组信息:

import pandas as pd

# 读取所有行,保留分组标记行,指定NaN识别规则
raw_df = pd.read_csv(
    'file.txt',
    sep='\s+',
    header=None,
    skip_blank_lines=True,
    na_values=['NaN'],
    names=['col0', 'col1', 'col2', 'col3']
)

# 标记分组行,提取分组名称并向前填充
raw_df['Group'] = raw_df['col0'].where(raw_df['col0'].str.startswith('/////', na=False)) \
                               .str.split().str[-1] \
                               .ffill()

# 过滤掉分组标记行,重置索引
final_df = raw_df[~raw_df['col0'].str.startswith('/////', na=False)].reset_index(drop=True)
print(final_df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:10:36