python - 使用随机 'nicknames' 对 pandas 名称列进行匿名化

标签 python pandas dataframe encryption

假设我有一个 pandas 数据框和一个“名称”列。我想对该列进行匿名化并隐藏身份。我可以做类似的事情,

df['nickname'] = 'P ' + pd.Series(pd.factorize(df['name'])[0] + 1).astype(str)

但它给了我这个:

name       nickname  
frank miller   P 1       
john cena      P 2       
john cena      P 2       
rock           P 3       

以上是可接受的匿名化,但不是我需要的。有什么办法可以得到下面想要的表格吗?也许是内置的 python 函数或已经实现了类似功能的人?

所需的表(具有随机昵称,但相同输入的输出相同):

name       nickname  
frank miller   Tiko       
john cena      Bozo       
john cena      Bozo       
the rock       Hana       

最佳答案

您可以使用Faker这个包会为您生成一个虚拟名称。

安装:

# pip
pip install Faker

# anaconda
conda install -c conda-forge faker

示例:

from faker import Faker
faker = Faker()
# seed the random generator to produce the same results
Faker.seed(4321)

dict_names = {name: faker.name() for name in df['name'].unique()}
df['nickname'] = df['name'].map(dict_names)

输出

           name     nickname
0  frank miller  Jason Brown
1     john cena  Jacob Stein
2     john cena  Jacob Stein
3          rock   Cody Brown
<小时/>

您还可以使用某些国家/地区的名称来初始化 Faker:

faker = Faker(['it_IT', 'de_DE', 'sv_SE'])

dict_names = {name: faker.name() for name in df['name'].unique()}
df['nickname'] = df['name'].map(dict_names)

输出

           name           nickname
0  frank miller    Nadeschda Finke
1     john cena      Marcus Warmer
2     john cena      Marcus Warmer
3          rock  Sophia Squarcione

关于python - 使用随机 'nicknames' 对 pandas 名称列进行匿名化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59928902/

相关文章:

python - 重新排列 linregress python 中的标题

python - 如何重置 Pandas 数据框中的索引?

python - 从首字母为小写的数据框中删除行

python - Pandas _metadata of DataFrame 持久化错误

python - 使用未压缩的 RLE 为 COCO 数据集编码 numpy 数组

python lxml以预定义的顺序写入文件

r - 创建具有 200 行且无列的空数据框

python - 如何在Python中生成按时间排序的uid?

python - Pandas read_html 在 Python 中返回具有 NaN 值的列

python - 满足groupby条件后如何返回索引?