You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:51:02