python - 重新编码 pandas 列的最有效和 pythonic 方法是什么?

标签 python pandas recode anonymize

我想对 pandas DataFrame 中的列进行“匿名化”或“重新编码”。最有效的方法是什么?我写了以下内容,但似乎有内置功能或更好的方法。

dataset = dataset.sample(frac=1).reset_index(drop=False) # reorders dataframe randomly (helps anonymization, since order could have some meaning)

# make dictionary of old and new values
value_replacer = 1
values_dict = {}   
for unique_val in dataset[var].unique():
    values_dict[unique_val] = value_replacer
    value_replacer += 1

# replace old values with new
for k, v in values_dict.items():
    dataset[var].replace(to_replace=k, value=v, inplace=True)

最佳答案

替代方式

df.col.astype('category').cat.codes.add(1)
Out[697]: 
0    1
1    1
2    2
3    3
4    4
5    2
dtype: int8

最好使用 MaxU 的答案:)

%timeit df.col.astype('category').cat.codes.add(1)#Wen
1000 loops, best of 3: 437 µs per loop
%timeit df['col'] = pd.factorize(df['col'])[0] + 1#MaxU
1000 loops, best of 3: 194 µs per loop

关于python - 重新编码 pandas 列的最有效和 pythonic 方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46163849/

相关文章:

在 R 中重新编码数值

python - 这个列表操作哪里出了问题?

python - 对每一行的 pandas 列进行排序

python - 将 pandas 中的行数据转换为列数据

python - Pandas - 根据多个 `or` 条件删除行

使用 data.table 重新编码变量

python - 如果另一列中的相应值也为 NaN,则将一列中的所有值设置为 NaN

python - 虚拟环境中将python从2.7升级到3.4

python - 字符串编码/解码问题 - 末尾缺少字符

r - tidyverse 解决方案,用于将多个列重新编码为新列,其中列名后缀增加一