Во-первых, сделайте conv_name
более эффективным, просто возвращая два значения:
def conv_name(x):
try:
names = pp.tag(str(x))[0]
return names['GivenName'], names['Surname']
except:
return np.nan, np.nan
Затем сгенерируйте оба столбца одновременно, используя result_type='expand'
:
dfn = df.name.to_frame()
names = dfn.name.apply(conv_name, axis=1, result_type='expand')
dfn['given_name'] = names[0]
dfn['surname'] = names[1]
Промежуточный результат names
будет выглядеть примерно так:
0 1
0 Bob Smith
1 Bjorn Janssen
2 Xiaofeng Cheng