Pandas: 如何将表示类别的字符串对象的列转换为整数?

Pandas: How to convert column of string objects representing categories to integers?

例如,如果我有一个 DataFrame df

    day     hour    price   booked
0   monday  7      12.0     True
1   monday  8      12.0     False
2   tuesday 7      13.0     True
3   sunday  8      13.0     False
4   monday  7      15.0     True
5   monday  8      13.0     False
6   tuesday 7      13.0     True
7   tuesday 8      15.0     False

其中 df['day'].dtypedtype('O'),例如。

我想把它转换成类似的东西:

    day     hour    price   booked
0   1       7      12.0     1
1   1       8      12.0     0
2   2       7      13.0     1
3   3       8      13.0     0
4   1       7      15.0     1
5   1       8      13.0     0
6   2       7      13.0     1
7   2       8      15.0     0

到整数的映射可以是任意的。

您可以使用 factorize 将列中的不同值编码为整数:

df['day'] = pd.factorize(df.day)[0]

这会将示例 DataFrame 的 'day' 列设置为以下内容:

>>> df
   day  hour  price booked
0    0     7     12   True
1    0     8     12  False
2    1     7     13   True
3    2     8     13  False
4    0     7     15   True
5    0     8     13  False
6    1     7     13   True
7    1     8     15  False

'day'列为整型:

>>> df.dtypes
day         int64
hour        int64
price     float64
booked       bool