首页 > 解决方案 > Python如何将分类值映射到新的数值而不获取索引必须是整数错误?

问题描述

我需要将一些分类值映射到整数。我在以下链接尝试了解决方案In[24]

title_mapping = {"Mr": 0, "Miss": 1, "Mrs": 2, 
                 "Master": 3, "Dr": 3, "Rev": 3, "Col": 3, "Major": 3, "Mlle": 3,"Countess": 3,
                 "Ms": 3, "Lady": 3, "Jonkheer": 3, "Don": 3, "Dona" : 3, "Mme": 3,"Capt": 3,"Sir": 3 }
for dataset in train_test_data:
    dataset['Title'] = dataset['Title'].map(title_mapping)

从我的脚本:

for dataset in train:
    dataset['Title'] = dataset['Title'].map(title_mapping)

这是带有 Title 字段的数据框:

在此处输入图像描述

我不断收到以下错误:

TypeError:字符串索引必须是整数

标签: python

解决方案


该错误可能是因为您尝试从trainDataFrame 而不是 DataFrames 列表进行迭代train_test_data

尝试简单地做:

train['Title'] = train['Title'].map(title_mapping)

您首先基于的笔记本在 [21] 处创建了一个数据帧列表:

train_test_data = [train, test]

因此,当它在 [24] 处迭代时,它首先遍历train然后test完全遍历,这是映射列时需要的。

顺便说一句,如果您想从 DataFrame 中逐行迭代,请执行以下操作:

for index_value, row in df.iterrows():
    print(index_value)
    # you can work for each column from that row:
    print(row['column_name'])

>>> 0
>>> I'm a column value

推荐阅读