pandas结合两个字符串忽略nan值

As3*_*tin 15 python string pandas

我有两列字符串.我想将它们组合起来并忽略nan值.这样:

ColA, Colb, ColA+ColB
str   str    strstr
str   nan    str
nan   str    str
Run Code Online (Sandbox Code Playgroud)

我试过,df['ColA+ColB'] = df['ColA'] + df['ColB']但是如果任一列都是nan,则会创建一个nan值.我也考虑过使用concat.

我想我可以选择那个,然后使用一些,df.ColA+ColB[df[ColA] = nan] = df[ColA]但这似乎是解决方法.

EdC*_*ica 22

调用fillna并传递一个空的str作为填充值,然后sum使用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
Run Code Online (Sandbox Code Playgroud)


ACh*_*ion 13

你可以用空字符串填充NaN:

df['ColA+ColB'] = df['ColA'].fillna('') + df['ColB'].fillna('')
Run Code Online (Sandbox Code Playgroud)


Vau*_*ein 8

就我而言,我想用分隔符 (a+b+c) 将 2 列以上连接在一起

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
Run Code Online (Sandbox Code Playgroud)

以下语法对我有用:

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
Run Code Online (Sandbox Code Playgroud)


Zer*_*ero 5

使用applystr.cat你可以

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
Run Code Online (Sandbox Code Playgroud)