Pandas 数据集 K 匿名化处理 - 错误解决与代码优化
Pandas 数据集 K 匿名化处理 - 错误解决与代码优化
本文将介绍使用 Pandas 库进行 K 匿名化处理时,常见的错误类型 'TypeError: 'int' object is not subscriptable' 的原因和解决方法,并提供优化代码示例。
错误原因
这个错误是因为在对 date_of_birth 列进行 apply 操作时,apply 函数默认将该列的每个元素作为整数处理,而整数不支持切片操作。
解决方法
将该列的元素转换为字符串类型,并在 apply 函数中添加 str 函数进行类型转换。
import pandas as pd
# 读取数据集
data = pd.read_csv('data.csv')
# 按照 illness 分组
groups = data.groupby('illness')
# 针对每组数据进行 K 匿名处理
for _, group in groups:
# 对非敏感属性进行泛化处理
group['name'] = group['name'].apply(lambda x: x[:2] + '*') # 姓名用前两个字符+*代替
group['date_of_birth'] = group['date_of_birth'].apply(lambda x: str(x)[:4] + '0s') # 出生年份用末尾加0s 代替
group['zip'] = group['zip'].apply(lambda x: x[:2] + '***') # 邮编用前两个字符+***代替
# 用伪造值替换非敏感属性的真实值
group['name'] = 'John Doe'
group['date_of_birth'] = '1990s'
group['zip'] = 'NY***'
# 将处理后的数据合并回原数据集
data.update(group)
# 将处理后的数据保存到文件
data.to_csv('data_anonymized.csv', index=False)
代码优化
上述代码可以进一步优化,使用 applymap 函数对整个 DataFrame 进行处理,避免循环操作。
import pandas as pd
# 读取数据集
data = pd.read_csv('data.csv')
# 按照 illness 分组
groups = data.groupby('illness')
# 针对每组数据进行 K 匿名处理
for _, group in groups:
# 对非敏感属性进行泛化处理
group[['name', 'date_of_birth', 'zip']] = group[['name', 'date_of_birth', 'zip']].applymap(lambda x: str(x)[:2] + '*' if x in ['name', 'zip'] else str(x)[:4] + '0s' if x == 'date_of_birth' else x)
# 用伪造值替换非敏感属性的真实值
group['name'] = 'John Doe'
group['date_of_birth'] = '1990s'
group['zip'] = 'NY***'
# 将处理后的数据合并回原数据集
data.update(group)
# 将处理后的数据保存到文件
data.to_csv('data_anonymized.csv', index=False)
通过以上优化,代码更加简洁易懂,同时提高了执行效率。
希望本文能够帮助您更好地理解和解决 Pandas 中的错误,并顺利完成 K 匿名化数据处理。
原文地址: https://www.cveoy.top/t/topic/oABi 著作权归作者所有。请勿转载和采集!