我有一个带有几个名称字段['PREFIX', 'FIRST_NAME', 'MIDDLE_NAME', 'LAST_NAME', 'SUFFIX']
的pandas DataFrame(20 x 1e6),我试图将其连接到单个字段'FULLNAME'
中。名称字段通常在字符串的开头或结尾处都有空格,此外,许多记录的字段都为空(例如后缀=”)。
其他答案建议照常添加字段:
df['FULLNAME'] = df['PREFIX'].str.strip() + df['MIDDLE_NAME'].str.strip() +
df['FIRST_NAME'].str.strip() + df['LAST_NAME'].str.strip() +
df['SUFFIX'].str.strip()
这里唯一的问题是,如果一个字段为空,那么我将在其所在位置加一个双倍空格。
我的解决方法如下:
df['FULLNAME'] = df[['PREFIX', 'FIRST_NAME', 'MIDDLE_NAME', 'LAST_NAME',
'SUFFIX']].apply(lambda x: ' '.join(' '.join([item.strip() for item in
x]).split()), axis = 1)
此解决方案有效,但鉴于我有超过一百万行,效率相对较低。我可以在这里进行更有效的操作吗?我想我可以像第一个示例一样添加字段,然后替换任何数字空格:
df['FULLNAME'] = df['FULLNAME'].str.replace(' ', ' ')
但是,鉴于我不知道给定行中有多少个名称字段为空白,这可能不是解决方案。
答案 0 :(得分:2)
使用agg
聚合列,然后稍后使用str.replace
删除多余的部分,会更容易。
name_cols = ['PREFIX', 'FIRST_NAME', 'MIDDLE_NAME', 'LAST_NAME', 'SUFFIX']
df['FULLNAME'] = df[name_cols].agg(' '.join, axis=1).str.replace('\s+', ' ')