在 python 中跨多个表匿名化数据并在匿名后保留相关列之间的关系?

Anonymise data in python across multiple tables and keep the relationships between related columns post anonymisation?

提问人:Ferhat 提问时间:8/1/2023 最后编辑:not_speshalFerhat 更新时间:8/1/2023 访问量:69

问:

我正在处理一个项目,其中有两个单独的 csv 文件,我从数据库中提取了这些文件。我想使用 pandas 和两个表中某些列的匿名内容在 python 中加载数据。其中一些列的数据将被匿名化,这些列已经存在于其他一个也应匿名化的表中。但我希望他们对同一件事匿名。

有没有办法在匿名后保持关系?即位于不同列中的两个表中的数据被匿名化为同一事物?

我在网上看到了很多例子,但仅限于匿名化单个表。如何对两个表执行此操作,并保留列之间的关系,以便它们匿名到同一事物,如下例所示?

例:

两个表,两个列都预匿名化,但表 1 中的 colA 与表 2 中的 colC 相关。

预匿名化:

表1

可乐 colB(科尔B)
123456 ABCDEFG公司
789123 海吉尔姆

表2:

colC(英语:colC)
123456 XYZ123型
789123 ABC456系列

匿名后:

表1

可乐 colB(科尔B)
912056 ZXCVBN的
450912 波伊特

表2:

colC(英语:colC)
912056 QWE098系列
450912 ASD321型
python pandas 数据表 匿名类型 加扰

评论

0赞 gtomer 8/1/2023
为什么在匿名化后要更改每个表中的两列?您不需要只更改 ID 列吗?

答:

2赞 gtomer 8/1/2023 #1

您需要先设置一个字典进行替换。如果您将使用它来更改所有表中的值,您将保留关系:

import pandas as pd
import random
df = pd.DataFrame({'ID': [1,1,2,3],
                  'value': ['sdfsdfs', 'fhgdhds', 'rgeerfdg', 'regfdd']})
# create dictionary to replace ID column with
IDs = df['ID'].unique()
anon = {}
for ID in IDs:
    annon[ID] = random.randint(111111,999999)
df.replace({'ID': anon}, inplace=True)
df

       ID     value
0  373005   sdfsdfs
1  373005   fhgdhds
2  152871  rgeerfdg
3  934125    regfdd
0赞 Blach15 8/1/2023 #2

取决于匿名性必须有多安全。您可以对数据使用哈希函数,例如 sha256。在 python 中,您可以导入和使用 hashlib。

import hashlib

def sha256Hash(id):
    return hashlib.sha256((f"{id}").encode("utf-8")).hexdigest()

IDs = [12345, 563279]

newIDs = [sha256Hash(id) for id  in IDs]
print(newIDs)

这将始终将 id 更改为相同的 newId