如何将同列结构的文本转换为7列DataFrame?
实现方法
可以用Python的pandas结合正则表达式处理这种空格分隔的固定列文本,快速转换成指定的7列DataFrame,具体操作如下:
1. 预处理数据
先清理每行开头的行号标记(如[1]),再按任意数量空格分割字段——因为原数据列之间是多空格分隔,直接用普通分割会得到空字符串,正则分割更可靠。
2. 调整列数
原数据去掉行号后有8个字段,按你的需求合并最后两个字段即可得到7列数据。
3. 创建DataFrame
自定义列名,将处理后的行数据传入pd.DataFrame()生成结果。
完整代码示例
import pandas as pd import re # 原始文本数据 raw_text = """[1] genos IDV_V 24 0.506472 14.0206 1.17 0 P [2] Lcrop IDV_V 6 0.768434E-06 0.212724E-04 0.00 0 B [3] Lgenos IDV_V 24 0.768434E-06 0.212724E-04 0.00 0 B [4] Residual SCA_V 160 1.00000 27.6828 8.83 0 P""" # 处理每行数据 processed_rows = [] for line in raw_text.split('\n'): # 移除开头的行号标记 cleaned_line = re.sub(r'^\[\d+\]\s+', '', line.strip()) # 按任意数量空格分割字段 fields = re.split(r'\s+', cleaned_line) # 合并最后两个字段,凑成7列 if len(fields) == 8: fields = fields[:-2] + [' '.join(fields[-2:])] processed_rows.append(fields) # 自定义列名(可根据业务场景调整) column_names = ['Component', 'Type', 'DF', 'Variance', 'SE', 'Percentage', 'Status'] # 生成DataFrame df = pd.DataFrame(processed_rows, columns=column_names) # 查看结果 print(df)
输出结果
Component Type DF Variance SE Percentage Status 0 genos IDV_V 24 0.506472 14.0206 1.17 0 P 1 Lcrop IDV_V 6 0.768434E-06 0.212724E-04 0.00 0 B 2 Lgenos IDV_V 24 0.768434E-06 0.212724E-04 0.00 0 B 3 Residual SCA_V 160 1.00000 27.6828 8.83 0 P
补充说明
如果你的7列需求是包含行号(把[1]这类标记作为第一列),可以修改预处理逻辑提取行号:
processed_rows = [] for line in raw_text.split('\n'): # 提取行号 row_num = re.match(r'^\[(\d+)\]', line).group(1) # 移除行号部分并分割字段 cleaned_line = re.sub(r'^\[\d+\]\s+', '', line.strip()) fields = re.split(r'\s+', cleaned_line)[:6] # 取前6个数据字段 processed_rows.append([row_num] + fields) # 定义包含行号的列名 column_names = ['Index', 'Component', 'Type', 'DF', 'Variance', 'SE', 'Percentage'] df = pd.DataFrame(processed_rows, columns=column_names)
内容的提问来源于stack exchange,提问作者Aoxiang Xin
相关产品推荐
相关产品推荐

