如何将列中的值更改为假值

2024-06-01 06:40:03 发布

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

我想将数据帧中的一列值更改为伪数据

以下是原始的表格示例:

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

现在我要做的是将名称列值更改为伪值,如下所示:

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,等等

这是否可行


Tags: 数据name名称示例dataframedfage表格
3条回答

使用factorize并将假名称设置为易于存储的int

df['Fake']=df.Name.factorize()[0]
df
    Name  Age  Fake
0  David   10     0
1  David   10     0
2  David   10     0
3  Kevin   12     1
4  Kevin   12     1
5    Ann   15     2
6   Joan   13     3

如果需要混合型

df.groupby('Name')['Name'].transform(lambda x : pd.util.testing.rands_array(8,1)[0])
0    jNAO9AdJ
1    jNAO9AdJ
2    jNAO9AdJ
3    es0p4Yjx
4    es0p4Yjx
5    x54NNbdF
6    hTMKxoXW
Name: Name, dtype: object

这是我的建议。下面的列表“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
from string import ascii_lowercase
def excel_names(num_cols):
    letters = list(ascii_lowercase)
    excel_cols = []
    for i in range(0, num_cols - 1):
        n = i//26
        m = n//26
        i-=n*26
        n-=m*26
        col = letters[m-1]+letters[n-1]+letters[i] if m>0 else letters[n1]+letters[i] if n>0 else letters[i]
        excel_cols.append(col)
    return excel_cols


unique_names=df['Name'].nunique()+1
names=excel_names(unique_names)
dictionary=dict(zip(df['Name'].unique(),names))
df['new_Name']=df['Name'].map(dictionary)

相关问题 更多 >