假设我有一个 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/