匿名数据/更换名称(Anonymizing data / replacing names)

2019-09-28 16:06发布

通常我用hashlib和使用。适用(哈希)函数匿名我的数据。

现在,我尝试一种新的方法,可以想象我有以下的DF称为“数据”:

贡献者 - 量所许
埃里克 - 10
弗兰克 - 28
约翰 - 49
弗兰克 - 77
芭芭拉 - 31

我想通过转动名称全部变成“PERSON1”匿名化“ PERSON2”等等,像这样:

贡献者 - 量所许
PERSON1 - 10
PERSON2 - 28
Person3可能 - 49
PERSON2 - 77
person4 - 31

所以,我虽然第一次是总结的名字列,因此名称连接到独特的索引和我的使用该指数对“人”后的数字。

所以,现在的IM停留在怎么做我通过迭代部分data.name列,例如通过“Person3可能”看在总结数据帧的索引和替换实际名称。

到目前为止我的代码

counter = 0
for names in data.contributor:
    if names == summarize.contributor[counter]:
         print(summarize.contributor[counter])
         data.contributor.replace(summarize.contributor[counter], "Person %d" % counter)
    counter = counter + 1

我的想法是把名字在名单+索引,但我想那里有一个更快的方法。 搜索“安东尼”只是一个测试,看看我的代码是工作。

Answer 1:

我认为,更快的解决方案是使用factorize的独特价值,加1 ,转换成Seriesstring S和前置Person字符串:

df['contributor'] = 'Person' + pd.Series(pd.factorize(df['contributor'])[0] + 1).astype(str)
print (df)
  contributor  amount payed
0     Person1            10
1     Person2            28
2     Person3            49
3     Person2            77
4     Person4            31


Answer 2:

也许尝试创建这种操作称为“指数”的数据帧,并保持独特name里面的值?

然后产生具有独特的名称索引口罩和合并产生的数据帧indexdata

index = pd.DataFrame()
index['name'] = df['name'].unique()
index['mask'] = index['name'].apply(lambda x : 'person' + 
str(index[index.name == x].index[0] + 1))

data.merge(index, how='left')[['mask', 'amount']]


Answer 3:

labels, uniques =  pd.factorize(df['name'])
labels = ['person_'+str(l) for l in labels]
df['contributor_anonymized'] = labels


文章来源: Anonymizing data / replacing names