提问人:Ferhat 提问时间:8/1/2023 最后编辑:not_speshalFerhat 更新时间:8/1/2023 访问量:69
在 python 中跨多个表匿名化数据并在匿名后保留相关列之间的关系?
Anonymise data in python across multiple tables and keep the relationships between related columns post anonymisation?
问:
我正在处理一个项目,其中有两个单独的 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型 |
答:
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
评论