关于OneHotEncoding Python的问题

2024-09-24 02:16:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个项目,将One Hot编码技术应用于.binetflow文件的分类列。你知道吗

代码:

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)

Original binetflow file

目前,我正在使用熊猫,我能够应用这项技术。问题是当我需要写入第二个文件时。你知道吗

当我尝试写入时,我期望的输出是,例如:0001或变量Onehot中的0.0.0.1,但当我尝试将其传递给dfle['State']列时,得到的是0.0或1.0。 图片可以在下面找到。你知道吗

variable Onehot

column dfle['State']

此外,应该只写的列,当我在编译器上写print时,它会正确显示,但当它在文件中写入时,它会添加一些小数位。你知道吗

Original and new binetflow file


Tags: 文件csvimportletransform技术fitpd
1条回答
网友
1楼 · 发布于 2024-09-24 02:16:31

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)

相关问题 更多 >