2016-06-06 236 views
0

倒车的名字我有一个名称列这样的数据帧:在大熊猫

Names col in DF

如何使用熊猫扭转格式的名称“XXX,XXX”高效?另外,如果你有其他的字符串清理技巧来替换这些名字,我将不胜感激!

回答

0

使用Series.str.replace执行正则表达式字符串替换:

df['Name'] = df['Name'].str.replace(r'(.+),\s+(.+)', r'\2 \1') 

的正则表达式模式(.+), (.+)装置

(  begin group #1 
    .+ match 1-or-more of any character 
)  end group #1 
,  match a literal comma 
\s+ match 1-or-more whitespace characters 
(  begin group #2 
    .+ match 1-or-more of any character 
)  end group #2 

第二个参数r'\2 \1',讲述str.replace替换匹配组#2,接着该模式的子由一个空间,然后是组#1。


import pandas as pd 
names = '''\ 
John Snow 
Black, Jack 
Jim Bean/ 
Draper, Don 
''' 
df = pd.DataFrame({'Name': names.splitlines()}) 
#   Name 
# 0 John Snow 
# 1 Black, Jack 
# 2 Jim Bean/ 
# 3 Draper, Don 

df['Name'] = df['Name'].str.replace(r'(.+),\s+(.+)', r'\2 \1') 

产生

  Name 
0 John Snow 
1 Jack Black 
2 Jim Bean/ 
3 Don Draper 
+0

我相信OP问任何其他清洁提示。你可以很容易地(正如我确信你知道的那样)在你的正则表达式的末尾添加一个'/?'来捕获任何尾随的''''。 – piRSquared

+0

谢谢unutbu,Stefan和谢安琪的回答!我接受这个,因为它是最灵活的,也是正则表达式的解释。 @Stefan你的回答非常优雅,我可能会在我的解决方案中使用它的概念。谢谢! – unpairestgood

0

也许你可以尝试这样的事情与reverse功能:

d = {'name':['Bran Stark','Jon Snow','Rhaegar Targaryen']} 
df = pd.DataFrame(data=d) 
df['new name'] = df['name'].apply(lambda x : ', '.join(reversed(x.split(' ')))) 
print(df['new name']) 

0   Stark, Bran 
1    Snow, Jon 
2 Targaryen, Rhaegar