pandas combine two strings ignore nan values

Call fillna and pass an empty str as the fill value and then sum with param axis=1:

In [3]:
df = pd.DataFrame({'a':['asd',np.NaN,'asdsa'], 'b':['asdas','asdas',np.NaN]})
df

Out[3]:
       a      b
0    asd  asdas
1    NaN  asdas
2  asdsa    NaN

In [7]:
df['a+b'] = df.fillna('').sum(axis=1)
df

Out[7]:
       a      b       a+b
0    asd  asdas  asdasdas
1    NaN  asdas     asdas
2  asdsa    NaN     asdsa

You could fill the NaN with an empty string:

df['ColA+ColB'] = df['ColA'].fillna('') + df['ColB'].fillna('')

Using apply and str.cat you can

In [723]: df
Out[723]:
       a      b
0    asd  asdas
1    NaN  asdas
2  asdsa    NaN

In [724]: df['a+b'] = df.apply(lambda x: x.str.cat(sep=''), axis=1)

In [725]: df
Out[725]:
       a      b       a+b
0    asd  asdas  asdasdas
1    NaN  asdas     asdas
2  asdsa    NaN     asdsa

In my case, I wanted to join more than 2 columns together with a separator (a+b+c)

In [3]:
df = pd.DataFrame({'a':['asd',np.NaN,'asdsa'], 'b':['asdas','asdas',np.NaN], 'c':['as',np.NaN ,'ds']})

In [4]: df
Out[4]:
       a      b   c
0    asd  asdas   as
1    NaN  asdas   NaN
2  asdsa    NaN   ds

The following syntax worked for me:

In [5]: df['d'] = df[['a', 'b', 'c']].fillna('').agg('|'.join, axis=1)

In [6]: df

Out[6]:
      a      b    c             d
0    asd  asdas   as  asd|asdas|as
1    NaN  asdas  NaN       |asdas|
2  asdsa    NaN   ds     asdsa||ds