Python新手求助:如何用Pandas或Numpy将字符串转为唯一数值?
嘿,作为刚接触Python和深度学习的新手,能关注到类别数据转数值这个点真的很赞!这是数据预处理里非常基础但关键的一步,我给你分享几个简单好用的方法,轻松把这些城市名称转换成唯一数值:
- 方法一:用pandas自带的
factorize()
这是最直接的方式,pandas专门为这类场景设计了这个函数,能快速给每个唯一类别分配一个整数ID:
import pandas as pd # 生成城市对应的唯一数值 city_codes, unique_cities = pd.factorize(df['city']) # 如果你想把结果加到原DataFrame里 df['city_code'] = city_codes
解释一下:city_codes就是每个城市对应的数值数组(从0开始的连续整数),unique_cities会返回对应的唯一城市列表,方便你后续查看映射关系。
- 方法二:用sklearn的
LabelEncoder
如果你之后要做深度学习建模,sklearn的这个工具会很顺手,它和factorize逻辑类似,但更贴合机器学习的工作流:
from sklearn.preprocessing import LabelEncoder le = LabelEncoder() # 拟合并转换城市列,生成唯一数值 df['city_code'] = le.fit_transform(df['city']) # 要是之后想把数值转回城市名称,可以用这个 # original_cities = le.inverse_transform(df['city_code'])
这个方法生成的数值也是从0开始的连续整数,而且可以很方便地逆转换,适合后续需要回溯的场景。
- 方法三:手动创建映射字典
如果你想自定义数值(比如不想从0开始,或者给特定城市分配特定ID),可以手动构建一个映射字典:
# 先获取所有唯一城市,然后给每个分配一个ID(这里用索引作为ID) city_map = {city: idx for idx, city in enumerate(df['city'].unique())} # 用map函数把城市转换成对应的数值 df['city_code'] = df['city'].map(city_map)
这种方式灵活性最高,你可以根据需求调整字典里的键值对,比如把"NEW YORK"设为100,完全由你决定。
另外提一句:如果之后做深度学习需要更复杂的编码(比如独热编码),可以用pd.get_dummies()或者sklearn的OneHotEncoder,但你要的是唯一数值,上面三个方法就完全够用啦!
内容的提问来源于stack exchange,提问作者Michael Yadidya
相关产品推荐
相关产品推荐

