numpy 如何清理以不同格式插入名称的列(以逗号、圆点等分隔)

ipakzgxi  于 2023-04-06  发布在  其他
关注(0)|答案(2)|浏览(108)

假设你有一个数据集,它有两列,一个id和一个name,但是列名是手动插入的,并且有不同格式的名称。有些是用点而不是空格分隔的。有些是先放姓,然后是逗号,然后是名字。有些行有中间名甚至名字标题。
| ID|姓名|
| --------------|--------------|
| 1|艾莉·乔埃拉|
| 二| Antonio.Chaz |
| 三|Ian Coretta博士|
| 四个|约翰·多伊|
| 五| Marie.Eliza.Grey |
| 六|拉里?梅森|
| 七|温弗雷德,巴里先生|
| 八| Andrea.T.B.Shaw |
如何清理此列,使结果类似于:〈姓名标题(如果插入)〉〈中间名(如果插入)〉。
| ID|姓名|
| --------------|--------------|
| 1|艾莉·乔埃拉|
| 二|安东尼奥·查斯|
| 三|Ian Coretta博士|
| 四个|无名氏|
| 五|玛丽·伊丽莎·格雷|
| 六|拉里·梅森|
| 七|巴里Winfred先生|
| 八|Andrea T B Shaw|
谢谢大家!

g9icjywg

g9icjywg1#

你可以使用正则表达式的dict来尝试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
wz1wpwve

wz1wpwve2#

我认为你必须使用split方法。你必须根据文本包含的内容做几个。我会首先检查文本中是否有空格,然后在它们之后拆分字符串。
你还需要列出一个例外,先生,博士等,如果拆分后的第一个字符串是其中的任何一个,那么就把它与第二个字符串合并。

你可以尝试创建函数

def person(data):
    test = ('dr.', 'mr.', 'etc.')
    try:
        space = val.index(' ')
    except:
        space = None
        
    if space:
        pers = data.split(' ')
    else:
        pers = data.split('.')

接下来检查所有你想要的但是如何检查一个词是名还是姓我不知道

相关问题