匿名化数据帧列

2024-09-30 16:19:41 发布

您现在位置:Python中文网/ 问答频道 /正文

比方说,我有下面的数据框

Person_info
(Bob, 2)
(John, 1)
(Bek, 10)
(Bob, 6)

我想通过保持它们的价值来匿名

Person_info
(Person 1, 2)
(Person 2, 1)
(Person 3, 10)
(Person 1, 6)

我有一个简单的匿名方法,但它不能帮助我得到想要的

有谁能帮上忙吗


Tags: 数据方法infojohnpersonbob价值bek
2条回答

this question之后,您可以使用strip()split()方法:

out=df['Person_info'].str.strip('()| ').str.split(',',1,expand=True)

然后根据this answer使用factorize()方法:

out[0]='Person' + pd.Series(pd.factorize(out[0])[0] + 1).astype(str)

最后使用agg()方法:

df['Person_info']=out.agg(tuple,1)

df的输出:

    Person_info
0   (Person1, 2)
1   (Person2, 1)
2   (Person3, 10)
3   (Person1, 6)

names转换为类别并获取类别代码;)

import pandas as pd

dataf = pd.DataFrame(
[('Bob', 2),
('John', 1),
('Bek', 10),
('Bob', 6)], columns=['name','valuex'])

dataf["name"] = dataf["name"].astype("category").cat.codes.map(lambda x: f"Person {x}")

print(dataf)

输出

       name  valuex
0  Person 1       2
1  Person 2       1
2  Person 0      10
3  Person 1       6

更新:

…
dataf["Person_info"] = [info for info in dataf.itertuples(index=False, name=None)]

输出:


       name  valuex     Person_info
0  Person 1       2   (Person 1, 2)
1  Person 2       1   (Person 2, 1)
2  Person 0      10  (Person 0, 10)
3  Person 1       6   (Person 1, 6)

相关问题 更多 >