该代码包括将OneHotEncoding技术应用于binetflow文件的两个字段: Proto 和 State 。我必须对5个文件执行此操作。我能够将下面的代码完美地应用于前两个代码。当到达第三位时,将引发错误:
TypeError:“ str”和“ float”的实例之间不支持“ <”。
我确定错误所在: 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))
08-03修改
当我运行上面的代码时,这(下面)是TraceBack。如您所见,错误是dfle.State = le.fit_transform(dfle.State),因此是OnehotX = ohe.fit_transform(X).toarray()。
回溯(最近通话最近一次):
文件 “ C:/用户/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”的实例之间不支持“ <”
新代码: 我试图按照Hemerson Tacon所说的做,并在回溯引发错误的部分上应用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:/用户/V/PycharmProjects/PreProcess/testfile.py”, 第53行,位于 ** dx = pd.DataFrame(data = OnehotX)NameError:名称'OnehotX'未定义**
最后编辑09/03
该问题的解决方案是将 df.replace()行添加到代码中。因此,当它读取时,用NaN代替空这个词来解决问题。
dfle ['State']。replace(np.nan,“空”,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)
答案 0 :(得分:1)
您可以将有问题的代码放在try
块中,并捕获TypeError
异常,检查是否是State字段为空的情况,如果为true则按您所说忽略它,以及不正确,再次引发错误。
如果您已在数据中发布了实际调用代码OneHotEncoding
的代码,将更容易回答您并在答案中提供一些代码。
修改
OnehotX
变量仅在try
块内定义。您需要在此块之外和之前定义它以修复错误。像OnehotX = None
这样的东西会起作用。另外,我还是重申我之前在except
块中所说的话,这是一种很好的做法,可以测试异常是否是由于您已经确定的问题引起的,这意味着测试State字段是否为空。