如何将未知行数与标签的带标签文本文件转为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:
| index | A | B | C | D | E | F | G |
|---|---|---|---|---|---|---|---|
| ASDF | 1 | 1 | 1 | 1 | NaN | NaN | NaN |
| QWER | NaN | 2 | NaN | NaN | NaN | 2 | NaN |
| ZXCV | 3 | NaN | 3 | NaN | 3 | 3 | 3 |
| TREW | 4 | 4 | NaN | NaN | NaN | NaN | 4 |
预先不知道文件的行数、标签的数量及名称,请问有什么可行的实现方案?
实现方案
可以通过逐行解析文本、动态收集字段与数据,再构建DataFrame的方式实现,具体步骤如下:
逐行解析文本内容:
读取文件后,过滤无效行,拆分出每行的索引名称和键值对部分;再将键值对按|分割,拆分每个键值对为字段名和数值,同时统一字段名为大写。动态收集数据与字段:
用字典存储每个索引对应的字段数据,同时记录所有出现过的字段名,确保最终DataFrame包含所有可能的列。构建并整理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
相关产品推荐
相关产品推荐

