用pandas dataframe python中的pii匿名特定列



我已经加载了一个带有JSON文件的S3存储桶,并将其解析/将其放到PANDAS DataFrame中。现在,我有一个带有175列的数据框,其中包含4列,其中包含个人身份信息。

我正在寻找一个快速解决方案,将这些列(名称& adress)匿名。我需要保留倍数的信息,以便如果发生多次同一人的名称或地址具有相同的哈希。

我可以使用熊猫或其他一些软件包中的现有功能吗?

使用Categorical是一种有效的方法 - 主要警告是编号将仅基于数据中的排序,因此如果此编号为止,则需要一些护理方案需要在多个列/数据集中使用。

df = pd.DataFrame({'ssn': [1, 2, 3, 999, 10, 1]})
df['ssn_anon'] = df['ssn'].astype('category').cat.codes
df
Out[38]: 
   ssn  ssn_anon
0    1         0
1    2         1
2    3         2
3  999         4
4   10         3
5    1         0

您可以从pandas

使用ngroupfactorize
df.groupby('ssn').ngroup()
Out[25]: 
0    0
1    1
2    2
3    4
4    3
5    0
dtype: int64

pd.factorize(df.ssn)[0]
Out[26]: array([0, 1, 2, 3, 4, 0], dtype=int64)

在Sklearn,如果您正在做ML,我会推荐这种方法

from sklearn import preprocessing
le = preprocessing.LabelEncoder()
le.fit(df.ssn).transform(df.ssn)
Out[31]: array([0, 1, 2, 4, 3, 0], dtype=int64)

您似乎正在寻找一种加密数据帧中字符串的方法。有一堆Python加密库,例如密码

如何使用它非常简单,只需将其应用于每个元素即可。

import pandas as pd
from cryptography.fernet import Fernet
df =pd.DataFrame([{'a':'a','b':'b'}, {'a':'a','b':'c'}])
f = Fernet('password')
res = df.applymap(lambda x: f.encrypt(byte(x, 'utf-8'))
# Decrypt
res.applymap(lambda x: f.decrypt(x))

这可能是安全性的最佳方法,但它会产生一个长字节/字符串,并且很难看。

# 'a' -> b'gAAAAABaRQZYMjB7wh-_kD-VmFKn2zXajMRUWSAeridW3GJrwyebcDSpqyFGJsCEcRcf68ylQMC83G7dyqoHKUHtjskEtne8Fw=='

另一种简单的方法,因此解决您的问题是创建一个函数,该函数将键映射到一个值并在存在新键的情况下创建新值。

mapper = {}
def encode(string):
    if x not in mapper:
         # This part can be changed with anything really
         # Such as mapper[x]=randint(-10**10,10**10)
         # Just ensure it would not repeat
         mapper[x] = len(mapper)+1 
return mapper[x]
res = df.applymap(encode)

听起来有点像您希望能够通过在某处维护键来扭转过程。如果您的用例允许,我建议用有效,可读和不可逆的占位符替换所有值。

约翰>马克

21 Hammersmith Grove RD> 48 Brewer Street

这对于为远程开发人员等生成可用的测试数据非常有用。您可以使用Faker自己生成替换值。如果您想在数据中维护一些实用程序,即"将所有地址替换为2英里内的其他地址",则可以使用我正在使用的API,称为Anon AI。我们从S3存储桶中解析JSON,自动找到所有PII(包括在自由文本字段中),并根据您的规格替换为占位符。如果需要,我们可以保持一致性和可逆性,如果您要保留不断增长的数据集的"实时"匿名版本,这将是最有用的。我们目前正在使用Beta,所以让我知道您是否有兴趣测试它。

相关内容

  • 没有找到相关文章

最新更新