如何在Pandas中拼接DataFrame多列非空值并仅保留有效分隔符
解决DataFrame非空值列拼接问题
问题场景
现有如下DataFrame:
C1 C2 C3 1 4 6 2 NaN 9 3 5 NaN NaN 7 3
需要将C1、C2、C3三列拼接为单个列,仅在非空值之间用逗号分隔,避免出现连续逗号或首尾空值的情况。
原尝试代码无法处理空值,得到的结果存在多余逗号:
df['New_Col'] = df[['C1','C2','C3']].agg(','.join, axis=1)
输出结果:
New_Col 1,4,6 2,,9 3,5, ,7,3
解决方案
方法1:逐行过滤非空值后拼接
使用apply遍历每一行,过滤掉NaN值后再用逗号连接:
import pandas as pd import numpy as np # 构造示例DataFrame df = pd.DataFrame({ 'C1': [1, 2, 3, np.nan], 'C2': [4, np.nan, 5, 7], 'C3': [6, 9, np.nan, 3] }) df['New_Col'] = df[['C1', 'C2', 'C3']].apply( lambda x: ','.join(str(val) for val in x if pd.notna(val)), axis=1 )
执行后得到理想输出:
New_Col 1,4,6 2,9 3,5 7,3
方法2:利用stack+groupby批量处理
如果列数较多,可通过stack堆叠非空值,再按行索引分组拼接:
df['New_Col'] = df[['C1','C2','C3']].stack().groupby(level=0).apply(','.join)
此方法会自动忽略NaN值,同样能得到目标结果。
内容的提问来源于stack exchange,提问作者Yash
相关产品推荐
相关产品推荐

