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

如何将未知行数与标签的带标签文本文件转为Pandas DataFrame?

问题描述

我有一个结构如下的文本文件:

- ASDF : |a=1|b=1|c=1|d=1
- QWER : |b=2|e=2|f=2
- ZXCV : |a=3|c=3|e=3|f=3|g=3
- TREW : |a=4|b=4|g=4

希望生成如下结构的Pandas DataFrame:

indexABCDEFG
ASDF1111NaNNaNNaN
QWERNaN2NaNNaNNaN2NaN
ZXCV3NaN3NaN333
TREW44NaNNaNNaNNaN4

预先不知道文件的行数、标签的数量及名称,请问有什么可行的实现方案?

实现方案

可以通过逐行解析文本、动态收集字段与数据,再构建DataFrame的方式实现,具体步骤如下:

  1. 逐行解析文本内容:
    读取文件后,过滤无效行,拆分出每行的索引名称和键值对部分;再将键值对按|分割,拆分每个键值对为字段名和数值,同时统一字段名为大写。

  2. 动态收集数据与字段:
    用字典存储每个索引对应的字段数据,同时记录所有出现过的字段名,确保最终DataFrame包含所有可能的列。

  3. 构建并整理DataFrame:
    将收集到的字典数据转为DataFrame,设置索引,对列进行排序(可选),缺失值自动填充为NaN。

示例代码

import pandas as pd

def parse_text_to_df(file_path):
    data_container = {}
    all_fields = set()
    
    with open(file_path, 'r', encoding='utf-8') as f:
        for line in f:
            line = line.strip()
            # 跳过空行和不符合格式的行
            if not line or not line.startswith('-'):
                continue
            # 拆分索引和键值区域
            index_segment, kv_segment = line.split(' : ', 1)
            current_index = index_segment.strip('- ')
            # 处理键值对
            kv_items = kv_segment.split('|')
            row_data = {}
            for item in kv_items:
                item = item.strip()
                if not item:
                    continue
                key, val = item.split('=')
                upper_key = key.upper()
                row_data[upper_key] = int(val)
                all_fields.add(upper_key)
            data_container[current_index] = row_data
    
    # 转换为DataFrame并排序列
    result_df = pd.DataFrame.from_dict(data_container, orient='index')
    result_df = result_df[sorted(all_fields)]
    return result_df

# 使用示例
df = parse_text_to_df('your_text_file.txt')
print(df)

代码说明

  • 自动适配任意行数和字段数量,无需预先定义结构;
  • 跳过无效行,提升对不规则文本的兼容性;
  • 字段名统一转为大写,匹配目标格式;
  • 数值自动转为整数类型,缺失字段自动填充NaN。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 20:55:29