Вопрос по OneHotEncoding - Python - PullRequest
       50

Вопрос по OneHotEncoding - Python

0 голосов
/ 27 февраля 2019

Я работаю над проектом, в котором применяется метод One Hot Encoding для категориального столбца файла .binetflow.

CODE:

import pandas as pd
from sklearn.preprocessing import LabelEncoder,OneHotEncoder

mydataset = pd.read_csv('originalfiletest.binetflow')

le = LabelEncoder()
dfle = mydataset
dfle.State = le.fit_transform(dfle.State)
X = dfle[['State']].values
ohe = OneHotEncoder()
Onehot = ohe.fit_transform(X).toarray()

dfle['State'] = Onehot

mydataset.to_csv('newfiletest.binetflow', columns=['Dur','State','TotBytes','average_packet_size','average_bits_psecond'], index=False)

Исходный файл binetflow

В настоящее время я использую Панд и могу применить эту технику.Проблема в том, что мне нужно записать во второй файл .

Когда я пытаюсь записать, я ожидаю вывод, например: 0001 или 0.0.0.1 в переменной Onehot, но я получаю 0.0 или 1.0, когда пытаюсь передать его в столбец dfle ['State'].Изображения можно найти ниже.

переменная Onehot

column dfle ['State']

Кроме того, столбецэто должно просто записать, когда я пишу print на компиляторе, он показывает правильно, но когда он пишет в файл, он добавляет несколько десятичных знаков.

Оригинальный и новый файл binetflow

1 Ответ

0 голосов
/ 27 февраля 2019

Onehot - массив numpy, и проблема в том, что вы присвоили массив столбцу dataframe

import pandas as pd
from sklearn.preprocessing import LabelEncoder, OneHotEncoder

mydataset = pd.DataFrame(data={'State': ['a', 'a', 'b', 'c', 'a', 'd']})

le = LabelEncoder()

mydataset.State = le.fit_transform(mydataset.State)
X = mydataset[['State']].values
ohe = OneHotEncoder()
Onehot = ohe.fit_transform(X).toarray()

dx = pd.DataFrame(data=Onehot)

mydataset['State'] = (dx[dx.columns[0:]].apply(lambda x: ','.join(x.dropna().astype(int).astype(str)), axis=1))

mydataset.to_csv('newfiletest.binetflow',
                 columns=['Dur', 'State', 'TotBytes', 'average_packet_size', 'average_bits_psecond'], index=False)
...