長いテキストまたは短いテキストで複数の列をエンコードする方法を探していましたが、実際には良い解決策を見つけることができませんでした。これが私のデータセットの例です:
IP Country Domain Attack Signature Thread
0.0.0.0.0 US somedomain.net compromized site 8787tgd9347343dex yes
1.1.1.1.1 US otherdomain.net trojan 74384399rfg99737h1 yes
これまでのところ私は試してみましたLabelEncoder
とOneHotEncoder
からsklearn
、彼らは動作しませんでした。フィードバック、ヘルプ、または指示は大歓迎です。
編集
私が達成しようとしていることについてもっと詳しく説明しようと思いました
import pandas as pd
from sklearn.preprocessing import LabelEncoder, OneHotEncoder, StandardScaler
df = pd.read_csv("export.csv", sep=",")
labelencoder = LabelEncoder()
def encoder(x = len(df.columns)):
for i in range(x):
df.iloc[:, i] = labelencoder.fit_transform(df.iloc[:, i])
encoder()
今、私は以下のデータフレームを持っています:
ただし、これはこれを行う正しい方法のようには見えません。
ありがとう
あなたはDictVectorizer
から使用することができますsklearn.feature_extraction
import pandas as pd
from sklearn.feature_extraction import DictVectorizer
data=pd.read_csv('export.csv',encoding = "utf-8", header=0)
vectorizer = DictVectorizer(sparse=False)
X = vectorizer.fit_transform(data[data.columns[0:]].to_dict("records"))
print(X)
次の入力の場合:
IP Country Domain Attack Signature Thread
0 0.0.0.0.0 US somedomain.net compromized site 8787tgd9347343dex yes
1 1.1.1.1.1 US otherdomain.net trojan 74384399rfg99737h1 yes
出力は次のようになります。
[[0. 1. 1. 0. 1. 1. 0. 0. 1. 1.]
[1. 0. 0. 1. 1. 0. 1. 1. 0. 1.]]
すべての列がトレーニング機能であると仮定すると、最後の列「スレッド」がラベルである場合は、コードを変更する必要があります。
ln=(len(data.columns)-1)
vectorizer = DictVectorizer(sparse=False)
X = vectorizer.fit_transform(data[data.columns[0:ln]].to_dict("records"))
Y = data[data.columns[ln]]
これがお役に立てば幸いです
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加