【问题标题】:masking string and phone number for dataframe in python pandaspython pandas中数据框的屏蔽字符串和电话号码
【发布时间】:2023-03-09 18:41:02
【问题描述】:

在这里我试图屏蔽一个数据框/数据集,其中包含整数和字符串值,如下所示:

sno,Name,Type 1,Type 2,phonenumber
1,Bulbasaur,Grass,Poison,9876543212
2,Ivysaur,Grass,Poison,9876543212
3,Venusaur,Grass,Poison,9876543212

这是我正在使用的代码,下面的代码对字符串值工作正常,它可以很好地屏蔽,但对于整数它不是屏蔽:

import pandas as pd

filename = "path/to/file"
columnname= "phonenumber"
valuetomask = "9876543212"

column_dataset1 = pd.read_csv(filename)

print(column_dataset1)


# if(choice == "True"):
#masking for particular string/number in a column
column_dataset1[columnname]=column_dataset1[columnname].mask(column_dataset1[columnname] == valuetomask,"XXXXXXXXXX")
print(column_dataset1)
# masking last four digits
column_dataset1[columnname]=column_dataset1[columnname].str[:-4]+"****"
print(column_dataset1)

上面的代码完全适用于字符串,但是当我给出“phonenumber”(任何整数值)列时它不起作用。

注意:我需要对给定的任何文件进行完全屏蔽(应屏蔽整个值)和部分屏蔽(即,上述文件中的最后三位数字/字符或前三位数字/字符)。

【问题讨论】:

    标签: python-3.x pandas data-masking


    【解决方案1】:

    转换为str 并替换最后四位数字:

    >>> df['phonenumber'].astype(str).str.replace(r'\d{4}$' , '****', regex=True)
    
    0    987654****
    1    987654****
    2    987654****
    Name: phonenumber, dtype: object
    

    这与@babakfifoo 的建议相同:

    >>>  df['phonenumber'].astype(str).str[:-4] + '****'
    0    987654****
    1    987654****
    2    987654****
    Name: phonenumber, dtype: object
    

    【讨论】:

      【解决方案2】:

      将您的电话号码转换为字符串,然后尝试屏蔽:

      mask_len = 5 # length of digits to mask from right side
      column_dataset1['phonenumber'] = (
          column_dataset1['phonenumber'].astype(str) # convert to string
              .str[:-mask_len]+"*" * mask_len # masking digits
      )
      

      【讨论】:

      猜你喜欢
      • 2021-01-10
      • 2013-07-13
      • 2018-05-04
      • 2019-12-06
      • 1970-01-01
      • 2012-07-24
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多