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

Pandas使用指定分隔符列拼接多列且避免空值产生多余分隔符

解决方案

核心逻辑是:先过滤掉每行待拼接列中的空值,再用当前行对应的分隔符拼接过滤后的非空内容,从根源上避免多余分隔符生成。

通用实现代码(适配多列动态调整场景)

你只需要修改concat_cols列表指定要拼接的列即可,不需要调整其他逻辑:

import pandas as pd
df = pd.DataFrame({'col_1': ['', '1', '1', '2', '2', '3', '3', '4', '', '4', '5', '5', '5', '5', '5', '5'],
                   'col_2': ['A', '', 'C', 'A', '', 'C', 'D', 'D', 'A', 'A', 'B', 'E', 'F', 'G', 'H', 'I'],
                   'col_3': ['256', '546', '985', '573', '265', '731', '968', '592', '364', '', '953', '476', '835',
                             '', '572', '903'],
                   'col_4': ['.', '.', '.', '-', '_', '_', '-', '.', '.', '/', '/', '.', '_', '_', '-', '.']})

# 在这里指定你需要拼接的列,业务列增减直接修改该列表即可
concat_cols = ['col_1', 'col_2', 'col_3']

df['concatenated'] = df.apply(
    lambda row: row['col_4'].join([val for val in row[concat_cols] if val]),
    axis=1
)

print(df)

运行效果

输出完全符合预期:

col_1 col_2 col_3 col_4 concatenated
0            A   256     .       A.256
1      1         546     .       1.546
2      1     C   985     .      1.C.985
3      2     A   573     -      2-A-573
4      2         265     _       2_265
5      3     C   731     _      3_C_731
6      3     D   968     -      3-D-968
7      4     D   592     .      4.D.592
8            A   364     .       A.364
9      4     A           /          4/A
10     5     B   953     /      5/B/953
11     5     E   476     .      5.E.476
12     5     F   835     _      5_F_835
13     5     G           /          5/G
14     5     H   572     -      5-H-572
15     5     I   903     .      5.I.903

适配特殊空值场景

如果你的业务数据中空值不是空字符串'',而是pd.NA、NaN或者纯空格,只需修改列表推导式的判断条件即可:

  • 空值为NaN/ pd.NA:[val for val in row[concat_cols] if pd.notna(val)]
  • 需要过滤纯空格内容:[val for val in row[concat_cols] if val.strip()]

大数据量优化

如果你的数据集超过100万行,apply性能不足,可以把待拼接列转为列表、分隔符转为列表,用原生Python循环处理,速度会比DataFrame apply快3~5倍。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:54:00