如何将DataFrame中的字符串分类标签转换为数值并解决Int64Index不可调用错误
报错原因
apply() 方法要求传入可调用对象(函数、lambda表达式等),你传入的 train['author'].index 是Series的Int64Index索引对象,不属于可调用类型,因此触发了Int64Index object is not callable错误。
字符串标签转数值的正确实现方式
你可以根据自己的使用场景选择以下任意一种方案:
- 方案1:使用pandas内置
factorize()快速转换(无需额外依赖,适合快速处理单数据集)
代码示例:# 返回的第一个元素为转换后的数值标签,第二个元素为对应原字符串标签的列表 train['author_label'], author_unique = pd.factorize(train['author']) - 方案2:使用scikit-learn的
LabelEncoder(适合分类任务的标准化预处理,支持训练测试集统一映射)
代码示例:from sklearn.preprocessing import LabelEncoder label_encoder = LabelEncoder() # 拟合原标签并转换为数值 train['author_label'] = label_encoder.fit_transform(train['author']) # 后续需要将数值转回原字符串标签时可调用以下方法 # original_author = label_encoder.inverse_transform([数值标签]) - 方案3:自定义映射字典(适合需要手动指定标签对应数值的场景)
代码示例:# 构造 作者名:数值 映射字典 author_map = {name: idx for idx, name in enumerate(train['author'].unique())} # 映射转换 train['author_label'] = train['author'].map(author_map)
注意事项
- 如果已经提前拆分了训练集和测试集,必须复用训练集生成的映射规则处理测试集,禁止单独对测试集做标签编码,避免同一作者在训练、测试集对应不同数值,影响模型效果。
- 转换完成后可执行
train[['author', 'author_label']].drop_duplicates()查看标签映射关系,确认转换结果符合预期。
内容的提问来源于stack exchange,提问作者user16796049
相关产品推荐
相关产品推荐

