Код состоит из применения метода OneHotEncoding к двум полям файла binetflow: Прото и Состояние .Я должен сделать это до 5 файлов.Я смог применить приведенный ниже код с совершенством к первым двум.Когда он достигает третьего, он выдает ошибку:
TypeError: '<' не поддерживается между экземплярами 'str' и 'float'. </strong>
Я уверен, что ошибка в строке: 0.000000, icmp ,, 60,60.0,0 файла, в котором поле State пусто.
Я хочу просто игнорироватьОдно горячее кодирование и копирование поля состояния в том виде, в каком оно есть, которое пустое и переход к следующей строке.
df = opendataset()
df['State2'] = df['State']
df['Proto2'] = df['Proto']
df['Dur'] = df.Dur.apply(lambda n: '%.6f' % n)
le = LabelEncoder()
dfle = df
dfle.State = le.fit_transform(dfle.State)
X = dfle[['State']].values
Y = dfle[['Proto']].values
ohe = OneHotEncoder()
OnehotX = ohe.fit_transform(X).toarray()
OnehotY = ohe.fit_transform(Y).toarray()
dx = pd.DataFrame(data=OnehotX)
dy = pd.DataFrame(data=OnehotY)
dfle['State'] = (dx[dx.columns[0:]].apply(lambda x:''.join(x.dropna().astype(int).astype(str)), axis=1))
dfle['Proto'] = (dy[dy.columns[0:]].apply(lambda y:''.join(y.dropna().astype(int).astype(str)), axis=1))
![enter image description here](https://i.stack.imgur.com/vnm9F.png)
08-03Edit
Это (ниже) TraceBack, когда я запускаю код выше.Как видите, ошибка dfle.State = le.fit_transform (dfle.State) и, следовательно, OnehotX = ohe.fit_transform (X) .toarray ().
Traceback (последний вызов последний):
Файл "C: /Users/V/PycharmProjects/PreProcess/testfile.py", строка 39, в dfle.State = le.fit_transform (dfle.State)
Файл "C: \ Users \ V \ PycharmProjects \ PreProcess \ venv \ lib \ site-packages \ sklearn \ preprocessing \ label.py", строка 236, в файле fit_transform self.classes_, y = _encode (y, encode = True)
Файл "C: \ Users \ V \ PycharmProjects \ PreProcess \ venv \ lib \ site-packages \ sklearn \ preprocessing \ label.py", строка 108, в _encode возвращают _encode_python (значения, уникальные, кодировать)
Файл "C: \ Users \ V \ PycharmProjects \ PreProcess \ venv \ lib \ site-packages \ sklearn \ preprocessing \ label.py", > строка 63, в _encode_python uniques = sorted (set (values))
TypeError: '<' не поддерживается между экземплярами 'str' и 'float' </strong>
НОВЫЙ КОД: Я попытался сделать то, что сказал Хемерсон Такон, и применил Try / Exception к частям, в которых трассировка выдает ошибку, но предупреждает меня об ошибке и выдает другую ошибку.
le = LabelEncoder()
dfle = df
try:
dfle.State = le.fit_transform(dfle.State)
except TypeError:
pass
X = dfle[['State']].values
Y = dfle[['Proto']].values
ohe = OneHotEncoder()
try:
OnehotX = ohe.fit_transform(X).toarray()
except ValueError:
pass
OnehotY = ohe.fit_transform(Y).toarray()
dx = pd.DataFrame(data=OnehotX)
dy = pd.DataFrame(data=OnehotY)
dfle['State'] = (dx[dx.columns[0:]].apply(lambda x:''.join(x.dropna().astype(int).astype(str)), axis=1))
dfle['Proto'] = (dy[dy.columns[0:]].apply(lambda y:''.join(y.dropna().astype(int).astype(str)), axis=1))
НОВАЯ ОШИБКА:
Трассировка (последний последний вызов): файл "C: /Users/V/PycharmProjects/PreProcess/testfile.py", строка 53, в ** dx = pd.DataFrame (data = OnehotX) NameError: имя 'OnehotX' не определено **
LAST EDIT 09/03
Решение проблемыбыло просто добавить строку df.replace () к коду.Поэтому, когда он читает, он заменяет NaN на слово пустое, решая проблему.
dfle ['State']. Replace (np.nan, "empty", inplace = True)
df = opendataset()
df['State2'] = df['State']
df['Proto2'] = df['Proto']
df['Dur'] = df.Dur.apply(lambda n: '%.6f' % n)
le = LabelEncoder()
dfle = df
dfle['State'].replace(np.nan,"empty", inplace=True)
dfle.State = le.fit_transform(dfle.State)
X = dfle[['State']].values
Y = dfle[['Proto']].values
ohe = OneHotEncoder()
OnehotX = ohe.fit_transform(X).toarray()
OnehotY = ohe.fit_transform(Y).toarray()
dx = pd.DataFrame(data=OnehotX)
dy = pd.DataFrame(data=OnehotY)