首页 > 解决方案 > 如何将列中的值更改为假值

问题描述

我想将数据框中的一列的值更改为假数据。

这是原始的表格示例:

df = {'Name':['David', 'David', 'David', 'Kevin', 'Kevin', 'Ann', 'Joan']
'Age':[10,10,10,12,12,15,13]}
df = pd.DataFrame(df)
df

现在我想要做的是将 Name 列值更改为这样的假值:

df = {'Name':[A, A, A, B, B, C, D]
    'Age':[10,10,10,12,12,15,13]}
    df = pd.DataFrame(df)
    df

请注意我如何将名称更改为不同的字母组合。这是示例数据,但在实际数据中,有很多名称,所以我从 A、B、C、D 开始,然后当它到达 Z 时,下一个新名称应该是 AA,然后是 AB,等等。

这可行吗?

标签: pythonpandasdataframe

解决方案


这是我的建议。下面的 List 'fake' 有超过 23000 个项目,如果你的 df 有更多的唯一值,只需增加循环的结尾(当前为 5),fake 列表将成倍增加:

import string
from itertools import combinations_with_replacement

names=df['Name'].unique()

letters=list(string.ascii_uppercase)

fake=[]

for i in range(1,5): #increase 5 if you need more items
    fake.extend([i for i in combinations_with_replacement(letters,i)])

fake=[''.join(i) for i in fake]

d=dict(zip(names, fake))

df['code']=df.Name.map(d)

假货样本:

>>> print(fake[:30])
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD']

输出:

>>>print(df)

    Name  Age code
0  David   10    A
1  David   10    A
2  David   10    A
3  Kevin   12    B
4  Kevin   12    B
5    Ann   15    C
6   Joan   13    D

推荐阅读