我只是 python 的初学者,我想了解更多关于它的信息。基本上我有一个数据框,其中包含客户的一些查询
查询ID | 简短的介绍 |
---|---|
1234 | 呜呜呜 |
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)
不幸的是,对于大文件,检索结果需要一段时间。有人可以帮助我找到实现此结果的最有效方法吗?在此先感谢您的帮助。此致