在Python中连接字符串,如果有空字符串则忽略分隔符

时间:2018-06-08 13:13:30

标签: python pandas dataframe

我有一个包含字符串和空字符串的Pandas DataFrame。

示例数据

col_A | col_B | col_C  
----- | ----- | -----  
 'a'  |  'b'  |  'c'  
      |       |  'c'  
 'a'  |       |  'c'  
 'a'  |  'b'  |        

我希望以一种忽略分隔符的方式连接列,如果有一个空字符串,我的结果如下所示

| 'a;b;c' | 
| 'c'     |
| 'a;c'   |
| 'a;b'   |

我尝试了以下

df.apply(lambda x: ';'.join(x), axis=1)

但我得到了

| 'a;b;c' |  
| ';;c'   |
| 'a;;c'  |
| 'a;b;'  |

看看其他似乎是类似问题的帖子我试过

df.apply(lambda x: ';'.join(filter(None,df)), axis=1)

但是这给了我

| 'a;b;c' |  
| 'a;b;c' | 
| 'a;b;c' | 
| 'a;b;c' | 

如果有空字符串,是否有办法以忽略分隔符的方式连接列?

3 个答案:

答案 0 :(得分:2)

您可以dropna删除NaN

df.apply(lambda x: ';'.join(x.dropna()), axis=1)

答案 1 :(得分:1)

您可以使用str.cat(它会跳过NaN值。)

#df=df.replace({'':np.nan})
df.apply(lambda x : x.str.cat(sep=';'),1)
Out[113]: 
0    a;b;c
1        c
2      a;c
3      a;b
dtype: object

答案 2 :(得分:0)

试试这段代码:

df.apply(lambda x: ';'.join(x[x!='']), axis=1)
Out: 
0    a;b;c
1        c
2      a;c
3      a;b
dtype: object