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

如何使用Python Pandas将TXT文件中关联多行文本合并为单行?

Pandas实现土壤描述行合并解决方案

问题说明

原始TXT文件内容(分隔符为|):

140037|1|TOP SOIL DARK BROWN CLAY RICH ORGANIC|0|0.8
140037|2|MATER SOFT||
140037|3|SANDY CLAY SOFT MOTTLED GREY/ORANGE|0.8|1
140037|4|BROWN <15% SAND GRAINS||
140037|5|CLAY MOTTLED DARK GREY/ORANGE BROWN|1|3
140037|6|SOFT BECOMING FIRM MINOR SILT AND||
140037|7|FINE SAND IN SOME LAYERS||

需要合并为:

140037|1|TOP SOIL DARK BROWN CLAY RICH ORGANIC MATER SOFT|0|0.8
140037|2|SANDY CLAY SOFT MOTTLED GREY/ORANGE BROWN <15% SAND GRAINS|0.8|1
140037|3|CLAY MOTTLED DARK GREY/ORANGE BROWN SOFT BECOMING FIRM MINOR SILT AND FINE SAND IN SOME LAYERS|1|3

实现步骤及代码

  1. 读取文件并处理空值
    用pd.read_csv读取文件,指定分隔符为|,将空字符串转为NaN便于后续判断:

    import pandas as pd
    
    # 读取文件,设置分隔符为|,空字符串转为NaN
    df = pd.read_csv('your_file.txt', sep='|', header=None, na_values=[''], dtype=str)
    # 给列命名方便操作
    df.columns = ['ID', 'Line_No', 'Description', 'Val1', 'Val2']
    
  2. 创建分组键
    规律:每组起始行的Val1和Val2不为空,后续行是补充描述且这两列为空。用Val1.notna()标记起始行,通过cumsum()生成唯一分组ID:

    # 生成分组键:起始行标记为True,累加后得到每个组的唯一ID
    df['Group_ID'] = df['Val1'].notna().cumsum()
    
  3. 分组聚合合并
    按Group_ID分组,合并Description列(空格连接),Val1和Val2取每组第一个非空值,ID取组内一致值,重新生成Line_No:

    # 分组聚合
    merged_df = df.groupby('Group_ID').agg(
        ID=('ID', 'first'),
        Line_No=('Group_ID', lambda x: str(x.iloc[0])),  # 重新生成Line_No
        Description=('Description', lambda x: ' '.join(x.dropna())),
        Val1=('Val1', 'first'),
        Val2=('Val2', 'first')
    ).reset_index(drop=True)
    
  4. 输出结果
    将合并后的DataFrame转为指定格式的文本:

    # 保存为TXT文件,用|分隔,空值转为空字符串
    merged_df.to_csv('merged_result.txt', sep='|', header=False, index=False, na_rep='')
    

执行上述代码后即可得到目标格式的文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:47:42