蟒蛇 - 在用星号来替换列前五个字符

问题描述 投票:0回答:4

我有一个CSV文件名为SSN列有这样的价值观

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的是什么?

python pandas replace
4个回答
2
投票

对我先生一样,这反而会前6个字符之前删除一切与你的新格式替换它们。

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

1
投票

你可以简单地实现这一目标用replace()方法:

示例数据帧:

从@AkshayNevrekar借用..

>>> df
           ssn
0  111-22-3333
1  121-22-1123
2  345-87-3425

结果:

>>> df.replace(r'^\d{3}-\d{2}', "***-**", regex=True)
           ssn
0  ***-**-3333
1  ***-**-1123
2  ***-**-3425

要么

>>> df.ssn.replace(r'^\d{3}-\d{2}', "***-**", regex=True)
0    ***-**-3333
1    ***-**-1123
2    ***-**-3425
Name: ssn, dtype: object

要么:

df['ssn'] = df['ssn'].str.replace(r'^\d{3}-\d{2}', "***-**", regex=True)

0
投票

把你的星号在前面,然后抓住最后4位数字。

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

0
投票

您可以使用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  
© www.soinside.com 2019 - 2024. All rights reserved.