连接多个DataFrame列并删除多个空格

时间:2018-08-21 19:10:32

标签: python pandas dataframe

我有一个带有几个名称字段['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('  ', ' ')

但是,鉴于我不知道给定行中有多少个名称字段为空白,这可能不是解决方案。

1 个答案:

答案 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+', ' ')