如何在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
相关产品推荐
相关产品推荐

