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

如何在Pandas中拼接含NaN的多列并剔除无效内容

解决DataFrame含NaN列拼接时的无效内容问题

这里给你几个实用方案,完美避开拼接时出现的"nan,"和多余逗号:

方法1:Apply中过滤非NaN值后拼接

直接在apply里筛选每行的非NaN元素,再进行拼接,逻辑直观且可控:

import pandas as pd
import numpy as np

df = pd.DataFrame({'foo':['a',np.nan,'c'], 'bar':[1, 2, 3], 'new':['apple', 'banana', 'pear']})
subcat_names = ["foo","new"]

df["result"] = df[subcat_names].apply(
    lambda x: ','.join([str(val) for val in x if pd.notna(val)]), 
    axis=1
)

print(df)

输出结果:

foo  bar     new    result
0    a    1   apple  a,apple
1  NaN    2  banana    banana
2    c    3    pear   c,pear

方法2:Stack + GroupBy(适合多列场景)

如果需要拼接的列比较多,用stack自动排除NaN值,再按原索引分组拼接,代码更简洁:

df["result"] = df[subcat_names].stack().groupby(level=0).apply(','.join)

这个方法会自动忽略NaN所在的行元素,最终拼接结果和方法1一致。

方法3:填充后清理冗余逗号(补救式方案)

如果已经提前做了fillna,可以通过字符串处理去掉首尾和重复的逗号,但不如前两种方法高效:

df = df.fillna("")
df["result"] = df[subcat_names].astype(str).agg(','.join, axis=1)\
    .str.strip(',')\
    .str.replace(',+', ',', regex=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 08:22:50