假设您有一个包含两列的数据集,一个id和一个名称,但是列名是手动插入的,并且名称以不同的格式键入。有些是用点而不是空白分隔的。还有一些人把姓氏放在前面,然后是逗号,然后是名字。有些行有中间名甚至名称标题。
<表类>
ID
名称
tbody><<tr>1 艾莉Joella 2安东尼奥。查兹 3 。伊恩克雷塔 4能源部,约翰。 5Marie.Eliza.Grey 6 Mason, Lary O 7 Winfred, Mr. Barry 8Andrea.T.B.Shaw 表类>
您可以尝试使用regex字典的replace
:
df['Name'] = df['Name'].replace({r'(?<!Dr|Mr)(.s*)': ' ', r'([^,]+)s*,s*(.*)': r'2 1'}, regex=True)
print(df)
# Output
ID Name
0 1 Ellie Joella
1 2 Antonio Chaz
2 3 Dr. Ian Coretta
3 4 John Doe
4 5 Marie Eliza Grey
5 6 Lary O Mason
6 7 Mr. Barry Winfred
7 8 Andrea T B Shaw
我认为你必须使用分割方法。你必须根据文本内容做几个操作。我将首先检查文本中是否有空格,并在它们之后分割字符串。
你还需要做一个例外的列表Mr. Dr.等,如果分割后的第一个字符串是其中的任何一个,然后将它与第二个字符串合并。
你可以试着让函数
def person(data):
test = ('dr.', 'mr.', 'etc.')
try:
space = val.index(' ')
except:
space = None
if space:
pers = data.split(' ')
else:
pers = data.split('.')
和下一步检查所有你想要的但是如何检查一个单词是姓还是名我不知道