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

如何在Pandas中汇总非全列有数据的行并新增汇总行?

合并不完整行生成完整记录

我在项目中经常遇到如下格式的DataFrame,需要将这些列未全有数据的行合并为完整行后插入SQL数据库。**注意:**空单元格的间距不固定。

12345
108.864INTERCAMBIADORES DE1123.60 210.08 166.71 1333.68
CALOR 8419500300
147.420 5.000PZ1A018181000081039.25 15149.52 19237.754880 96188.77
147.420INTERCAMBIADORES DE3882.25 725.75 921.60 4608.00
CALOR 8419500300
566.093 12.000PZ1A018366000066187.40 12374.29 6546.806709 78561.68
566.093INTERCAMBIADORES DE3170.76 592.80 313.63 3763.56
CALOR 8419500300
3.645 1.000PZ1A0185890000836.64 159.69 996.330339 996.33
3.645INTERCAMBIADORES DE40.08 7.65 47.73 47.73
CALOR 8419500300
131.998 3.000PZ1A019039000032819.41 6135.17 12984.858315 38954.57
131.998INTERCAMBIADORES DE1572.24 293.91 622.05 1866.15
CALOR 8419500300
123.833 3.000PZ1A019079000054769.36 10238.84 21669.402087 65008.21
123.833INTERCAMBIADORES DE2623.77 490.50 1038.09 3114.27
CALOR 8419500300
115.214 2.000PZ1A019592000054642.66 10215.05 32428.851279 64857.70
115.214INTERCAMBIADORES DE2617.70 489.36 1553.53 3107.06

解决方案

使用Pandas可以快速合并这些不完整行,步骤如下:

代码实现

import pandas as pd
import numpy as np

# 示例DataFrame(实际场景可替换为读取你的数据源)
data = [
    ["", "108.864", "", "INTERCAMBIADORES DE", "1123.60      210.08     166.71     1333.68"],
    ["", "", "", "CALOR 8419500300", ""],
    ["", "147.420       5.000", "PZ", "1A0181810000", "81039.25       15149.52    19237.754880        96188.77"],
    ["", "147.420", "", "INTERCAMBIADORES DE", "3882.25      725.75     921.60     4608.00"],
    ["", "", "", "CALOR 8419500300", ""],
    ["", "566.093      12.000", "PZ", "1A0183660000", "66187.40       12374.29     6546.806709        78561.68"],
    ["", "566.093", "", "INTERCAMBIADORES DE", "3170.76      592.80     313.63     3763.56"],
    ["", "", "", "CALOR 8419500300", ""],
    ["", "3.645       1.000", "PZ", "1A0185890000", "836.64          159.69      996.330339          996.33"],
    ["", "3.645", "", "INTERCAMBIADORES DE", "40.08        7.65      47.73       47.73"],
    ["", "", "", "CALOR 8419500300", ""],
    ["", "131.998       3.000", "PZ", "1A0190390000", "32819.41        6135.17    12984.858315        38954.57"],
    ["", "131.998", "", "INTERCAMBIADORES DE", "1572.24      293.91     622.05     1866.15"],
    ["", "", "", "CALOR 8419500300", ""],
    ["", "123.833       3.000", "PZ", "1A0190790000", "54769.36       10238.84    21669.402087        65008.21"],
    ["", "123.833", "", "INTERCAMBIADORES DE", "2623.77      490.50    1038.09     3114.27"],
    ["", "", "", "CALOR 8419500300", ""],
    ["", "115.214       2.000", "PZ", "1A0195920000", "54642.66       10215.05    32428.851279        64857.70"],
    ["", "115.214", "", "INTERCAMBIADORES DE", "2617.70      489.36    1553.53     3107.06"]
]
df = pd.DataFrame(data, columns=["1", "2", "3", "4", "5"])

# 替换空字符串为NaN,便于处理空值
df = df.replace('', np.nan)

# 生成分组ID:以列3(含PZ的行)作为分组标识,连续的不完整行归为同一组
df['group_id'] = df['3'].notna().cumsum()

# 分组合并:将每组内各列的非空值用空格连接,生成完整行
merged_df = df.groupby('group_id').agg(lambda x: ' '.join(x.dropna().astype(str))).reset_index(drop=True)

# 输出合并后的结果
print(merged_df)

关键步骤说明

  1. 空值处理:将空字符串转为NaN,避免后续合并时出现无效内容。
  2. 分组划分:通过列3是否包含PZ来识别完整行,将其与前面的不完整行划分为同一组。
  3. 合并操作:对每个分组,将每列的非空值拼接成完整内容,确保每行都包含该组的所有有效数据。

自定义调整

  • 如果需要修改列内容的分隔符,可将' '替换为其他符号(如'|')。
  • 如果分组逻辑需要调整(比如以列4的编码为标识),可修改group_id的生成规则,例如:
    df['group_id'] = df['4'].str.startswith('1A').cumsum()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:50:27