首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按N-Gram字符向量化Pandas DataFrame,并追加列名

按N-Gram字符向量化Pandas DataFrame,并追加列名
EN

Stack Overflow用户
提问于 2018-12-13 07:21:08
回答 1查看 439关注 0票数 0

我正在尝试将一个熊猫数据帧矢量化为单独的n-gram字符。但是有一个警告,我希望列名是字符序列的一部分。例如,假设这是原始数据:

代码语言:javascript
复制
First Name, Last Name
John, Smith

我使用长度为3的字符n-gram。

我希望生成以下n-gram:

代码语言:javascript
复制
"First Name_Joh", 
"First Name_ohn", 
"Last Name_Smi", 
"Last Name_mit", 
"Last Name_ith"

因此,我可以为该向量创建一个热编码。我希望列名是字符n元语法序列的一部分。对于我正在做的事情,我不希望所有的n-gram被混为一谈。(如果我使用的术语不正确,很抱歉;我不擅长解释此材料。)

^我知道如何使用循环来做这件事,但效率很低;但是我需要它具有可伸缩性和可重用性,所以我想使用sklearn的CountVectorizer来做这件事。我该怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-13 07:58:58

我不确定这是否是您想要的,但也许您可以将CountVectorizer与字符分析器一起使用,并迭代列以得到gram。

代码语言:javascript
复制
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)

提供:

或者,您可能希望名称作为值?

代码语言:javascript
复制
output * output.columns

提供:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53752893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档