pandas 从python中的名称列中删除前缀

r6l8ljro  于 2023-06-04  发布在  Python
关注(0)|答案(6)|浏览(136)

我有这个数据集

ID      Name     
101    DR. ADAM SMITH
102    BEN DAVIS
103    MRS. ASHELY JOHNSON
104    DR. CATHY JONES 
105    JOHN DOE SMITH

期望输出

ID        Name 
101     ADAM SMITH
102     BEN DAVIS
103     ASHELY JOHNSON
104     CATHY JONES
105     JOHN DOE SMITH

我需要摆脱前缀我尝试df['Name'] = df['Name'].replace(to_replace = 'DR. ', value = '')我重复相同的代码为所有前缀,但我有当我这样做什么也没有发生。有什么原因吗?
先谢谢你。

ghg1uchk

ghg1uchk1#

如果第一个单词以.结尾,则使用正则表达式匹配第一个单词。

df['Name'] = df['Name'].str.replace(r'^[A-Z]+\.\s+', '', regex=True)
d5vmydt9

d5vmydt92#

'''#示例数据data = { ' ID ':[101,102,103,104,105],“名称”:亚当·史密斯博士本·戴维斯夫人阿什利·Json博士Cathy Jones ','John Doe Smith ']}

# Create a DataFrame
df = pd.DataFrame(data)

# Function to remove prefixes from names
def remove_prefix(name):
    prefixes = ['DR.', 'MRS.', 'MR.', 'MS.']  # Add more prefixes if needed
    for prefix in prefixes:
        if name.startswith(prefix):
            return name[len(prefix)+1:]
    return name

# Apply the function to the 'Name' column
df['Name'] = df['Name'].apply(remove_prefix)

# Print the modified DataFrame
print(df)

'''

bihw5rsg

bihw5rsg3#

你可以使用正则表达式来替换字符串的一部分。例如:

df['Name'] = df['Name'].str.replace(r'^(?:DR|MRS?)\.\s*', '', regex=True)
print(df)

图纸:

ID            Name
0  101      ADAM SMITH
1  102       BEN DAVIS
2  103  ASHELY JOHNSON
3  104     CATHY JONES
4  105  JOHN DOE SMITH

注意:.replace(r'DR. ', '')试图用空字符串替换整个DR.,而不仅仅是字符串的一部分。

v64noz0r

v64noz0r4#

你就快成功了。您需要添加.str:

df['Name'] = df['Name'].str.replace('DR. ', '')
pokxtpni

pokxtpni5#

使用正则表达式:

import re

name = "DR. ADAM SMITH"
print(re.sub(r".*\.\s", "", name)) # ADAM SMITH

此表达式匹配以句点和空格结尾的任何内容,并且应该匹配大多数前缀(“DR.”、“MRS.”、“MR.”等)。你可以像这样将它集成到你的代码中:
1.在代码顶部添加import re行。
1.使用线df['Name'] = re.sub(r".*\.\s", "", df['Name'])代替df['Name'] = df['Name'].replace(to_replace = 'DR. ', value = '')
有关正则表达式的更多信息,请参见:https://www.w3schools.com/python/python_regex.asp

4xy9mtcn

4xy9mtcn6#

在使用replace()函数时什么都没有发生的原因是因为它将输入视为文字字符串并查找精确匹配。
在您的情况下,“名称”列中的值在前缀前后包含额外的空格,因此找不到完全匹配的值。
要解决这个问题,您可以使用re模块中的正则表达式(regex)来删除“Name”列中的前缀:

import re
import pandas as pd

data = {
    'ID': [101, 102, 103, 104, 105],
    'Name': ['DR. ADAM SMITH', 'BEN DAVIS', 'MRS. ASHELY JOHNSON', 'DR. CATHY JONES', 'JOHN DOE SMITH']
}

df = pd.DataFrame(data)
df['Name'] = df['Name'].apply(lambda x: re.sub(r'\b(?:DR\.|MRS\.)\s*', '', x))

print(df)

相关问题