连接两个列,如果任何值是NA,则返回NA,但是需要返回真正的连接



我有dataframe:

df = pd.DataFrame({'student_id': [71, 63, 23],
'student_name': [nan, 'Peter Andrews', 'Amy Powers'],
})

我正在创建一个新的列column连接id + name使用

df['student_id_name'] = df['student_id'].astype(str) + ' ' + df['student_name']

所需输出:

{student_id_name : [71, 63 Peter Andrews, 23 Amy Powers]}

结果:

{student_id_name : [nan, 63 Peter Andrews, 23 Amy Powers]}

你可以帮助达到预期的结果吗?

使用Series.str.catna_rep参数,最后通过Series.str.strip删除可能的尾随空格:

df['student_id_name'] = (df['student_id'].astype(str).str.cat(df['student_name'], 
sep=' ', na_rep='').str.strip())
print (df)
student_id   student_name   student_id_name
0          71            NaN                71
1          63  Peter Andrews  63 Peter Andrews
2          23     Amy Powers     23 Amy Powers

您可以使用fillna()来清除数据框中的缺失/空白值。然后你原来的表达就会起作用。注意,这实际上会将nan替换为所使用的替换值:

import math
df = pd.DataFrame({'student_id': [71, 63, 23],
'student_name': [math.nan, 'Peter Andrews', 'Amy Powers'],
})
# 
df = df.fillna('')
df['student_id_name'] = df['student_id'].astype(str) + ' ' + df['student_name']
[Out]:
student_id   student_name   student_id_name
0          71                              71 
1          63  Peter Andrews  63 Peter Andrews
2          23     Amy Powers     23 Amy Powers

最新更新