python-用星号替换列中的前五个字符

python-用星号替换列中的前五个字符,python,pandas,replace,Python,Pandas,Replace,我在CSV文件中有一个名为SSN的列,其值如下 289-31-9165 ***-**-9165 我需要遍历此列中的值并替换前五个字符,使其看起来像这样 289-31-9165 ***-**-9165 以下是我目前掌握的代码: emp_file = "Resources/employee_data1.csv" emp_pd = pd.read_csv(emp_file) new_ssn = emp_pd["SSN"].str.replace([:5], "*") emp_pd["S

我在CSV文件中有一个名为SSN的列,其值如下

289-31-9165
***-**-9165
我需要遍历此列中的值并替换前五个字符,使其看起来像这样

289-31-9165
***-**-9165
以下是我目前掌握的代码:

emp_file = "Resources/employee_data1.csv"

emp_pd = pd.read_csv(emp_file) 

new_ssn = emp_pd["SSN"].str.replace([:5], "*")

emp_pd["SSN"] = new_ssn

如何循环遍历该值并用星号(仅)替换前五个数字,并保持hiphens不变

将星号放在前面,然后抓住最后4位数字

new_ssn = '***-**-' + emp_pd["SSN"][-4:]

将星号放在前面,然后抓住最后4位数字

new_ssn = '***-**-' + emp_pd["SSN"][-4:]

您可以使用
regex

df = pd.DataFrame({'ssn':['111-22-3333','121-22-1123','345-87-3425']})

def func(x):
    return re.sub(r'\d{3}-\d{2}','***-**', x)

df['ssn'] = df['ssn'].apply(func)    

print(df)
输出:

           ssn                                                                                                                                 
0  ***-**-3333                                                                                                                                 
1  ***-**-1123                                                                                                                                 
2  ***-**-3425  

您可以使用
regex

df = pd.DataFrame({'ssn':['111-22-3333','121-22-1123','345-87-3425']})

def func(x):
    return re.sub(r'\d{3}-\d{2}','***-**', x)

df['ssn'] = df['ssn'].apply(func)    

print(df)
输出:

           ssn                                                                                                                                 
0  ***-**-3333                                                                                                                                 
1  ***-**-1123                                                                                                                                 
2  ***-**-3425  

与Mr.Me类似,这将删除前6个字符之前的所有内容,并用新格式替换它们

emp_pd["SSN"] = emp_pd["SSN"].apply(lambda x: "***-**" + x[6:])

与Mr.Me类似,这将删除前6个字符之前的所有内容,并用新格式替换它们

emp_pd["SSN"] = emp_pd["SSN"].apply(lambda x: "***-**" + x[6:])

您只需使用replace()方法即可实现这一点:

数据帧示例: 借用@AkshayNevrekar

>>> df
           ssn
0  111-22-3333
1  121-22-1123
2  345-87-3425
结果: 或

或:


您只需使用replace()方法即可实现这一点:

数据帧示例: 借用@AkshayNevrekar

>>> df
           ssn
0  111-22-3333
1  121-22-1123
2  345-87-3425
结果: 或

或:


最后4个应该是:
new_ssn='***-***-'+emp_pd[“ssn”][-4:
最后4个应该是:
new_ssn='***-***-'+emp_pd[“ssn”][-4:
@krithkaraghavendran,虽然这是一个很好的方法,但pandas replace()是实现这一点的更快的方法,您不需要调用lambda,但是,除了接受答案外,您还可以向上投票:-)+1来自我。@KrithikaRaghavendran,虽然这是一个很好的方法,但pandas replace()是实现这一点的更快方法,您不需要调用lambda,但是您可以向上投票,除了接受答案:-)+1来自我。