我有以下具有名字和姓氏的数据框。我想创建一列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并将数据插入到新框架中,但是在我这样做之前-还有另一种快速方法可以将这些字符串组合到一列中吗?
答案 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