Я создал функцию для ручного однократного кодирования для списка идентификаторов продуктов:
Столбец данных:
dfrfm['IDHotel']
0 1075
1 43
2 2130
3 43
4 43
...
335549 9376
335550 8250
335551 9235
335552 8250
335553 8564
Name: IDHotel, Length: 335554, dtype: int64
Функция:
idshotel_list = list(set(dfrfm['IDHotel'].values))
idshotel_list.sort()
def encodeidhotel(idshotel_list,idshotel):
onehotidhotel = np.zeros(len(idshotel_list),dtype = int) #vettore di zeri della lunghezza degli alberghi possibili
for idx in idshotel: # per ogni albergo dell'utente corrente
onehotidhotel[idshotel_list.index(idx)] = 1 #cerchiamo indice e poniamo elemento a 1
return list(onehotidhotel)
Теперь я пытаюсь воспроизвести его для следующего столбца, где в каждой строке есть список служб, разделенных запятой:
dfrfm['HotelServices']
0 74, 82, 90
1 16, 55, 79, 86, 87, 90, 92
2 16, 52, 74, 79, 83, 85, 88, 90, 102
3 16, 55, 79, 86, 87, 90, 92, 101
4 16, 55, 79, 86, 87, 90, 92, 101
...
335549 48, 79, 1710
335550 48, 55, 74, 79, 90, 1296, 1402, 1425, 1439, 15...
335551 74, 79, 1296, 1586, 1699, 1711
335552 48, 55, 74, 79, 90, 1296, 1402, 1425, 1439, 15...
335553 74, 79, 90, 1279, 1296, 1531, 1619
Name: HotelServices, Length: 335554, dtype: object
Я пробовал использовать split , но я постоянно получаю эту ошибку:
TypeError: 'float' object is not iterable
Я также пробовал MultiLabelBinarizer , но у него та же проблема:
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
df = pd.DataFrame(mlb.fit_transform(dfrfm['HotelServices']),columns=mlb.classes_, index=dfrfm.index)
print (df)
Что Я делаю не так?