如何在Python Pandas DataFrame中用唯一整数替换疾病字符串
没问题!这里有几种实用的方法可以帮你把DataFrame中的疾病名称替换成唯一整数,你可以根据需求选择:
方法1:用Pandas的factorize()快速自动映射
这个方法会自动给每个唯一的疾病名称分配一个递增的整数,默认从0开始,如果你想从1开始,只需要加1就行,非常适合不需要手动指定映射关系的场景:
import pandas as pd # 构建你的原始DataFrame df = pd.DataFrame({ 'epi_week': [21835, 21836, 21837, 21838, 21839], 'state': ['WY', 'WY', 'WY', 'WY', 'WY'], 'loc_type': ['STATE', 'STATE', 'STATE', 'STATE', 'STATE'], 'disease': ['MUMPS', 'POLIO', 'HEPATITIS', 'MUMPS', 'HEPATITIS'], 'cases': [2, 3, 3, 6, 6], 'incidence': [0.40, 0.76, 0.61, 1.73, 1.21] }) # 替换disease列,从1开始分配整数 df['disease'] = pd.factorize(df['disease'])[0] + 1 print(df)
运行后输出的结果就是你想要的:
epi_week state loc_type disease cases incidence 0 21835 WY STATE 1 2 0.40 1 21836 WY STATE 2 3 0.76 2 21837 WY STATE 3 3 0.61 3 21838 WY STATE 1 6 1.73 4 21839 WY STATE 3 6 1.21
方法2:自定义映射字典(手动指定对应关系)
如果你需要明确指定每个疾病对应的整数(比如必须让'MUMPS'对应1,'POLIO'对应2),可以用自定义字典来实现:
# 定义你想要的映射关系 disease_map = { 'MUMPS': 1, 'POLIO': 2, 'HEPATITIS': 3 } # 替换disease列 df['disease'] = df['disease'].map(disease_map) print(df)
这个方法的好处是完全可控,你可以按照自己的需求设置每个疾病的对应值。
方法3:用LabelEncoder(适合机器学习场景)
如果你后续要做机器学习相关的任务,scikit-learn的LabelEncoder是个不错的选择,它同样可以实现映射,而且方便后续的逆转换:
from sklearn.preprocessing import LabelEncoder le = LabelEncoder() # 拟合并转换,加1让整数从1开始 df['disease'] = le.fit_transform(df['disease']) + 1 # 如果你想查看原始疾病和整数的对应关系,可以用这个: # print(dict(zip(le.classes_, le.transform(le.classes_) + 1))) print(df)
这个方法的优势是可以轻松恢复原始的疾病名称(用le.inverse_transform()),适合需要来回转换的场景。
内容的提问来源于stack exchange,提问作者wahidd
相关产品推荐
相关产品推荐

