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

Python 连接多个DataFrame列并删除多个空格,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个pandas数据帧(20 x 1e6),其中有几个名称字段['PREFIX'、'FIRST\u name'、'MIDDLE\u name'、'LAST\u name'、'SUFFIX'],我正试图将其连接到一个字段'FULLNAME'。名称字段通常在字符串的开头或结尾有空格,而且许多记录的字段为空(例如后缀=“”) 其他答案建议像往常一样添加字段: df['FULLNAME'] = df['PREFIX'].str.strip() + df['MIDDLE_NAME'].str.stri

我有一个pandas数据帧(20 x 1e6),其中有几个名称字段
['PREFIX'、'FIRST\u name'、'MIDDLE\u name'、'LAST\u name'、'SUFFIX']
,我正试图将其连接到一个字段
'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('  ', ' ')

但是,这可能不是一个包罗万象的解决方案,因为我不知道给定行中有多少名称字段可能是空的。

使用
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+', ' ')

谢谢在这种情况下,使用
agg
比使用
apply
有什么好处吗?@LeChase-
agg
比本站中的
apply
更优化一些。他们最终都做了同样的事情,但agg无论如何都应该返回一个系列。