我想重写SSN#,以便从视图中隐藏前五个数字。
以下csv文件如下:
Emp ID,Name,DOB,SSN,State
15,Samantha Lara,1993-09-08,848-80-7526,Colorado
预期数据:
15,Samantha,Lara,09/08/1993,***-**-7526,CO
代码:
# create a list to store the data from csv file
empl_ssn = []
reform_ssn = row["3"]
reform_ssn = ........
我不知道如何修改它。
答案 0 :(得分:2)
我假设您正在遍历数据并将该行逐行写入所需的输出文件。如果是这种情况,那么只需将字符串连接在一起,就可以将最后5个字符的SSN和一个预设字符串分开。
pandas
尽管连续但看起来SSN位于第4个索引。
专业提示:如果您在谈论敏感数据,请格外小心,并将其放入CSV文件中!!还使您的示例更加匿名。名称类似于Jane Doe和SSN(123-45-6789)。显然,这是假的。
答案 1 :(得分:0)
如果我是您,我只需调整输出的字符串量即可。因此,我将调整打印行,使其看起来像这样:
Range("E1") = 28
Range("E1").Copy
Range("A1:A10").PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd, SkipBlanks:= _
False, Transpose:=False
Range("E1").ClearContents
您可能只需要稍微调整代码的打印语句即可。但是,如果您希望完全调整字符串以使数据不再存在,则应该首先知道字符串在python中是不可变的。但是我仍然会有几乎相同的解决方案:
print("***-**-"+str(ssn[7:11]))
#That should print something like:
***-**-1234
注意:我会在注释中添加此内容,但我还不能,如果还不能完全满足您的答案,您是否可以添加有关如何打印输出的代码,因此我可以根据需要调整答案。
答案 2 :(得分:0)
\d
查找所有数字re.sub
count=5
替换前5位数字import re
new_ssn = re.sub(r'\d', '*', '123-45-6789', count=5)
print(new_ssn)
>>> '***-**-6789'
pandas.DataFrame.apply
更新整个列import pandas as pd
df = pd.read_csv('file.csv')
Emp ID Name DOB SSN State
15 Samantha Lara 1993-09-08 848-80-7526 Colorado
# Overwrite SSN
df.SSN = df.SSN.apply(lambda x: re.sub(r'\d', '*', x, count=5))
Emp ID Name DOB SSN State
15 Samantha Lara 1993-09-08 ***-**-7526 Colorado
# Create a new column
df['SSN_hidden'] = df.SSN.apply(lambda x: re.sub(r'\d', '*', x, count=5))
Emp ID Name DOB SSN State SSN_hidden
15 Samantha Lara 1993-09-08 848-80-7526 Colorado ***-**-7526
# Save the data
df.to_csv('file.csv', index=False)