文本分析:使用python查找列中最常用的单词
我创建了一个dataframe,其中只有一列带有主题行文本分析:使用python查找列中最常用的单词,python,pandas,Python,Pandas,我创建了一个dataframe,其中只有一列带有主题行 df = activities.filter(['Subject'],axis=1) df.shape 此操作返回此数据帧: Subject 0 Call Out: Quadria Capital - May Lo, VP 1 Call Out: Revelstoke - Anthony Hayes (Sr Assoc... 2 Columbia Partners: WW Worked (Not Sure Will E
df = activities.filter(['Subject'],axis=1)
df.shape
此操作返回此数据帧:
Subject
0 Call Out: Quadria Capital - May Lo, VP
1 Call Out: Revelstoke - Anthony Hayes (Sr Assoc...
2 Columbia Partners: WW Worked (Not Sure Will Ev...
3 Meeting, Sophie, CFO, CDC Investment
4 Prospecting
然后,我尝试用以下代码分析文本:
import nltk
top_N = 50
txt = df.Subject.str.lower().str.replace(r'\|', ' ')
words = nltk.tokenize.word_tokenize(txt)
word_dist = nltk.FreqDist(words)
stopwords = nltk.corpus.stopwords.words('english')
words_except_stop_dist = nltk.FreqDist(w for w in words if w not in stopwords)
rslt = pd.DataFrame(word_dist.most_common(top_N), columns=['Word', 'Frequency'])
print(rslt)
我得到的错误消息是:“Series”对象没有属性“Subject”引发错误是因为您已将
df
转换为此行中的一个系列:
df = activities.filter(['Subject'],axis=1)
所以当你说:
txt = df.Subject.str.lower().str.replace(r'\|', ' ')
df是序列,没有序列属性。尝试替换为:
txt = df.str.lower().str.replace(r'\|', ' ')
或者,不要在之前和之后将数据帧过滤为单个系列
txt = df.Subject.str.lower().str.replace(r'\|', ' ')
应该有用
[更新]
我上面所说的是不正确的,正如前面指出的那个样,过滤器并没有返回一个序列,而是返回一个只有一列的数据帧 抛出错误是因为您已将
df
转换为此行中的一个系列:
df = activities.filter(['Subject'],axis=1)
所以当你说:
txt = df.Subject.str.lower().str.replace(r'\|', ' ')
df是序列,没有序列属性。尝试替换为:
txt = df.str.lower().str.replace(r'\|', ' ')
或者,不要在之前和之后将数据帧过滤为单个系列
txt = df.Subject.str.lower().str.replace(r'\|', ' ')
应该有用
[更新]
我上面所说的是不正确的,正如前面指出的那个样,过滤器并没有返回一个序列,而是返回一个只有一列的数据帧 数据:
主题
“呼叫:Quadria Capital-Lo May,副总裁”
呼叫:雷夫斯托克-安东尼·海斯(高级助理)。。。
哥伦比亚合作伙伴:WW成功了(不确定是否会。。。
会议,Sophie,CDC投资首席财务官
探矿
#读入数据
df=pd.read_剪贴板(sep=',')
更新代码:
- 将所有单词转换为小写,并删除所有非字母数字字符
txt=df.Subject.str.lower()
,抛出一个words=nltk.tokenize.word\u tokenize(txt)
,因为TypeError
是一个txt
系列。
- 下面的代码标记数据帧的每一行
- 对单词进行标记,将每个字符串拆分为一个
。在本例中,查看列表
将显示一个df
列,其中每一行都是一个列表tok
导入nltk
作为pd进口熊猫
顶部=50
#替换所有非字母数字字符
df['sub_rep']=df.Subject.str.lower().str.replace('\W','')
#标记化
df['tok']=df.sub_rep.apply(nltk.tokenize.word_tokenize)
- 要分析列中的所有单词,将各个行列表合并为一个列表,称为
单词
#将所有标记化单词添加到列表中
words=df.tok.tolist()#这是一个列表列表
words=[列表中的单词对列表中的单词]
#频率分布
word_dist=nltk.FreqDist(单词)
#删除停止字
stopwords=nltk.corpus.stopwords.words('english'))
文字(除停止文字外)=nltk.FreqDist(如果w不在停止文字中,则w代表文字中的w)
#输出结果
rslt=pd.DataFrame(最常见的单词(顶部),列=['word','Frequency'])
输出rslt
:
数据:
主题
“呼叫:Quadria Capital-Lo May,副总裁”
呼叫:雷夫斯托克-安东尼·海斯(高级助理)。。。
哥伦比亚合作伙伴:WW成功了(不确定是否会。。。
会议,Sophie,CDC投资首席财务官
探矿
#读入数据
df=pd.read_剪贴板(sep=',')
更新代码:
- 将所有单词转换为小写,并删除所有非字母数字字符
txt=df.Subject.str.lower()
,抛出一个words=nltk.tokenize.word\u tokenize(txt)
,因为TypeError
是一个txt
系列。
- 下面的代码标记数据帧的每一行
- 对单词进行标记,将每个字符串拆分为一个
。在本例中,查看列表
将显示一个df
列,其中每一行都是一个列表tok
导入nltk
作为pd进口熊猫
顶部=50
#替换所有非字母数字字符
df['sub_rep']=df.Subject.str.lower().str.replace('\W','')
#标记化
df['tok']=df.sub_rep.apply(nltk.tokenize.word_tokenize)
- 要分析列中的所有单词,将各个行列表合并为一个列表,称为
单词
#将所有标记化单词添加到列表中
words=df.tok.tolist()#这是一个列表列表
words=[列表中的单词对列表中的单词]
#频率分布
word_dist=nltk.FreqDist(单词)
#删除停止字
stopwords=nltk.corpus.stopwords.words('english'))
文字(除停止文字外)=nltk.FreqDist(如果w不在停止文字中,则w代表文字中的w)
#输出结果
rslt=pd.DataFrame(最常见的单词(顶部),列=['word','Frequency'])
输出rslt
:
尝试将
df.Subject
替换为justdf
?尝试将df.Subject
替换为justdf
?谢谢Dever,我尝试了第一个选项,但出现了这个错误:“DataFrame”对象没有属性“str”。第二个选项给了我这个其他错误:TypeError:预期的字符串或类似字节的对象activities.filter(['Subject'],axis=1)
不返回series。它返回带有1列的数据帧。@Esther不确定为什么会出现此错误。我可以执行与行txt=df.Subject.str.lower().str.replace(r'\\\',''类似的操作
并且没有收到属性错误。我假设这就是抛出错误的地方,对吗?是的。我想我需要在这里深入挖掘一下。文件可能有问题。我们会随时通知你的!@Esther:检查无、NaN
或df.Subject
中的任何非字符串值,谢谢Dever,我尝试了第一个选项,我得到了这个错误:“DataFrame”对象没有属性“str”。第二个选项给了我这个其他错误:TypeError:应该是字符串或字节,比如objectact