将多个列字符串连接成一列

时间:2019-09-20 17:48:58

标签: python pandas

我有以下具有名字和姓氏的数据框。我想创建一列fullname

df1 = pd.DataFrame({'firstname':['jack','john','donald'],
                  'lastname':[pd.np.nan,'obrien','trump']})

print(df1)

  firstname lastname
0      jack      NaN
1      john   obrien
2    donald    trump

如果没有NaN值,这将起作用:

df1['fullname'] = df1['firstname']+df1['lastname']

但是,由于我的数据框中有NaNs,所以我决定先转换为string。但这会在fullname列中引起问题:

df1['fullname'] = str(df1['firstname'])+str(df1['lastname'])


  firstname lastname                                           fullname
0      jack      NaN  0      jack\n1      john\n2    donald\nName: f...
1      john   obrien  0      jack\n1      john\n2    donald\nName: f...
2    donald    trump  0      jack\n1      john\n2    donald\nName: f...

我可以编写一些函数来检查nans并将数据插入到新框架中,但是在我这样做之前-还有另一种快速方法可以将这些字符串组合到一列中吗?

5 个答案:

答案 0 :(得分:3)

您需要使用 .fillna() 处理NaN,在这里,您可以用''填充它。

df1['fullname'] = df1['firstname'] + ' ' +df1['lastname'].fillna('')

输出:

 firstname  lastname    fullname
0   jack    NaN         jack
1   john    obrien      john obrien
2   donald  trump       donald trumpt

答案 1 :(得分:1)

您也可以使用.add并指定一个fill_value

df1.firstname.add(" ").add(df1.lastname, fill_value="")

PS:不建议将太多的添加项或+链接到字符串,但是对于一两列,您应该没事

答案 2 :(得分:0)

df1['fullname'] = df1['firstname']+df1['lastname'].fillna('')

答案 3 :(得分:0)

还有Series.str.cat可以处理NaN并包括分隔符。

df1["fullname"] = df1["firstname"].str.cat(df1["lastname"], sep=" ", na_rep="")

   firstname lastname      fullname
 0      jack      NaN         jack
 1      john   obrien   john obrien
 2    donald    trump  donald trump

答案 4 :(得分:0)

我要做什么(对于这种情况,需要连接两列以上)

df1.stack().groupby(level=0).agg(' '.join)
Out[57]: 
0            jack
1     john obrien
2    donald trump
dtype: object