如何解决Python 使用一列中最常用的 3 个单词的组合向数据框添加新列
我只是 Python 的初学者,我想了解更多关于它的信息。 基本上我有一个数据框,其中包含客户的一些查询
查询ID | 简短说明 |
---|---|
1234 | bla bla bla |
1235 | 特拉啦啦 |
我想向数据框中添加一个新列,该列将显示列中最常用的 3 个单词的组合。简短描述包含在每行的简短描述中。 我处理问题的方式如下:
import pandas
import nltk
from pandas import read_csv
filename="file.csv"
li = []
#Stop words
#Custom stop Words
stopwords=['p1','p2','iaco','passaggio','re','rv','sl','pdf']
#English Stop Words
en=nltk.corpus.stopwords.words('english')
stopwords.extend(en)
# RegEx for stopwords
RE_stopwords = r'\b(?:{})\b'.format('|'.join(stopwords))
#DataFrame from csv file
data=read_csv(filename,encoding ='latin1',delimiter=",",error_bad_lines=False,engine="python")
#Calculate trigram
words = (data.rss_short_description
.str.lower()#/[-!$%^&*()_+|~=`{}\[\]:";'<>?,.\/]/
.replace([r'\|','[-!$%^&*()_+|~=`{}\[\]:";\'<>?,.\/]'],[' ',''],regex=True)
.replace([r'\|',RE_stopwords],regex=True)
.str.cat(sep=' ')
.split()
)
trigram=list(nltk.trigrams(words))
rslt = pandas.DataFrame(Counter(trigram).most_common(top_N),columns=['Word','Frequency']).set_index('Word')
#Loop for look up trigram index
for index,row in rslt.iterrows():
arr=numpy.array(index)
data["words"]=data['rss_short_description'].apply(lambda x: index if any(word in x.lower() for word in arr) else 'None')
sub_data=data.loc[data['words']!='None' ]
sub_data=sub_data[columns]
new_data=pandas.concat([new_data,sub_data])
new_data=new_data.drop_duplicates(subset='query_id',keep="first")
new_data.to_csv(filename)
不幸的是,对于大文件,检索结果需要一段时间。 有人能帮我找到一种最有效的方法来实现这个结果吗? 先谢谢您的帮助。 最好的问候
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。