您的问题是转换为int8
只能将值编码为 -128 到 127 的类型。检查此示例:
import pandas as pd
from sklearn.preprocessing import LabelEncoder
df = pd.DataFrame({
'City': [i for i in range(129)]
})
le = LabelEncoder()
情况1:
df['City_enc1'] = le.fit_transform(df['City'])
print(df['City_enc1'])
>>> 0 0
1 1
2 2
3 3
4 4
...
124 124
125 125
126 126
127 127
128 128
Name: City_enc1, Length: 129, dtype: int64
案例二:
df['City_enc2'] = le.fit_transform(df['City']).astype('int8')
print(df['City_enc2'])
>>> 0 0
1 1
2 2
3 3
4 4
...
124 124
125 125
126 126
127 127
128 -128
Name: City_enc2, Length: 129, dtype: int8
看到由于第二种情况的转换,LabelEncoder
必须使用负值。
更好的是根本不转换或选择int16
或以上作为替代方案。