Pandas: 运行 外部库函数有效创建新列

Pandas: Run external library function to create new column efficiently

def conv_name(x):
    try:
        #library to convert strings to name dict
        return pp.tag(str(x))[0]
    except:
        return np.nan

dfn = df.name.to_frame()
dfn['conv'] = dfn.name.apply(lambda x: conv_name(x))
dfn['given_name'] = dfn.conv.apply(pd.Series).GivenName
dfn['sunname'] = dfn.conv.apply(pd.Series).Surname

结果

我觉得必须有一种方法可以在不创建 dfn.conv 的情况下创建名字和姓氏列,但是如果我做类似 ...

dfn['given_name'] = dfn.name.apply(lambda x: conv_name(x)['GivenName'])

我收到一个 KeyError。

所以我的具体问题是,如何在不创建 conv 列的情况下创建 first 和 surname 列?

首先,通过简单地返回两个值来提高 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