Sklearn 将字符串类标签更改为 int

新手上路,请多包涵

我有一个熊猫数据框,我正在尝试将给定列中由字符串表示的值更改为整数。例如:

 df = index    fruit   quantity   price
         0    apple          5    0.99
         1    apple          2    0.99
         2   orange          4    0.89
         4   banana          1    1.64
       ...
     10023     kiwi         10    0.92

我想看看:

 df = index    fruit   quantity   price
         0        1          5    0.99
         1        1          2    0.99
         2        2          4    0.89
         4        3          1    1.64
       ...
     10023        5         10    0.92

我可以用

df["fruit"] = df["fruit"].map({"apple": 1, "orange": 2,...})

如果我有一个小列表要更改,这会起作用,但我正在查看一个包含 500 多个不同标签的列。有什么方法可以将它从 string 更改为 int 吗?

原文由 Lukasz 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 539
2 个回答

使用 factorize 然后转换为 categorical 如有必要:

 df.fruit = pd.factorize(df.fruit)[0]
print (df)
   fruit  quantity  price
0      0         5   0.99
1      0         2   0.99
2      1         4   0.89
3      2         1   1.64
4      3        10   0.92


 df.fruit = pd.Categorical(pd.factorize(df.fruit)[0])
print (df)
  fruit  quantity  price
0     0         5   0.99
1     0         2   0.99
2     1         4   0.89
3     2         1   1.64
4     3        10   0.92

print (df.dtypes)
fruit       category
quantity       int64
price        float64
dtype: object

此外,如果需要从 1 计算:

 df.fruit = pd.Categorical(pd.factorize(df.fruit)[0] + 1)
print (df)
  fruit  quantity  price
0     1         5   0.99
1     1         2   0.99
2     2         4   0.89
3     3         1   1.64
4     4        10   0.92

原文由 jezrael 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用 sklearn.preprocessing

 from sklearn import preprocessing

le = preprocessing.LabelEncoder()
le.fit(df.fruit)
df['categorical_label'] = le.transform(df.fruit)

将标签转换回原始编码。

 le.inverse_transform(df['categorical_label'])

原文由 Hugo Lemieux-Fournier 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题