首页 > 解决方案 > 将数据框列添加在一起,由考虑 NaN 的列分隔

问题描述

为了避免连续的逗号,如何从新列中完全省略 NaN 值?

df['newcolumn'] = df.apply(''.join, axis=1)

一种方法可能是使用条件 lambda

df.apply(lambda x: ','.join(x.astype(str)) if(np.isnan(x.astype(str))) else '', axis = 1)

但这会返回一条错误消息:

TypeError:(“输入类型不支持 ufunc 'isnan',根据强制转换规则 ''safe'' 无法安全地将输入强制转换为任何支持的类型”,'发生在索引 0')

编辑: 您的两个答案都有效。为了获得答案,我将使用什么标准来确定要编码哪一个?性能考虑?

标签: pythonpandasjoin

解决方案


您可以使用stack,因为它会NaN默认删除

df.stack().groupby(level=0).apply(','.join)
Out[552]: 
0    a,t,y
1      a,t
2    a,u,y
3    a,u,n
4      a,u
5    b,t,y
dtype: object

数据输入


df
Out[553]: 
  Mary John David
0    a    t     y
1    a    t   NaN
2    a    u     y
3    a    u     n
4    a    u   NaN
5    b    t     y

推荐阅读