Python 通过N-Gram字符对数据帧进行矢量化,并附加列名
我正在尝试将熊猫数据帧矢量化为单独的n克字符。不过有一个警告,我希望列名是字符序列的一部分。例如,假设这是原始数据:Python 通过N-Gram字符对数据帧进行矢量化,并附加列名,python,pandas,scikit-learn,Python,Pandas,Scikit Learn,我正在尝试将熊猫数据帧矢量化为单独的n克字符。不过有一个警告,我希望列名是字符序列的一部分。例如,假设这是原始数据: First Name, Last Name John, Smith 我使用的是长度为3的字符n-grams 我希望生成以下n-gram: "First Name_Joh", "First Name_ohn", "Last Name_Smi", "Last Name_mit", "Last Name_ith" 所以我可以为这个向量创建一个热编码。我希望列名是字符n-gr
First Name, Last Name
John, Smith
我使用的是长度为3的字符n-grams
我希望生成以下n-gram:
"First Name_Joh",
"First Name_ohn",
"Last Name_Smi",
"Last Name_mit",
"Last Name_ith"
所以我可以为这个向量创建一个热编码。我希望列名是字符n-gram序列的一部分。对于我正在进行的工作,我不想把所有的n-gram都集中在一起。(如果我没有使用正确的术语,很抱歉;我不擅长解释此材料。)
^我知道如何以一种低效的方式使用循环来实现这一点;然而,我需要这是可伸缩的和可重用的,所以我想使用像sklearn的CountVectorizer这样的东西来做到这一点。我该怎么做 不确定这是否正是您想要的,但也许您可以使用字符分析器使用
CountVectorizer
,并在列上迭代到gram
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
data = pd.DataFrame(
{
'first_name': ['John', 'Ed'],
'last_name': ['Smith', 'Bean']
}
)
vec = CountVectorizer(analyzer = 'char', ngram_range = (3, 3))
output = pd.DataFrame()
for i in data.columns:
pre = pd.DataFrame(vec.fit_transform(data[i]).toarray(), columns = [i + '_' + j for j in vec.get_feature_names()])
output = pd.concat([output, pre], axis = 1)
pd.concat([data, output], axis = 1)
给出:
或者您希望名称作为值
output * output.columns
给出:
在这里,循环确实是您唯一的选择。注意,
countvectorier
使用循环。您可以尝试将字符串转换为一些数字并对其进行操作。