TypeError:无法散列的类型:在熊猫系列上使用nltk.FreqDist时的“列表”

时间:2020-02-05 21:54:22

标签: python python-3.x pandas dataframe nltk

我正在尝试获取数据框中包含的每个推文中术语的词频。

使用此代码,所有推文都像一个词一样对待:

import pandas as pd
import numpy as np
import nltk
import string
import csv
import collections
from collections import Counter
nltk.download('stopwords')

data= pd.read_csv('C:/Users/leska/Desktop/tweets.csv.zip', compression='zip')

print (data.columns)
print (len(data.tweet_id))
tweets = data.text
sw= set(nltk.corpus.stopwords.words ('english'))
punctuation = set (string.punctuation)
tweets_filtered = [w.lower() for w in tweets if w.lower() not in sw and w.lower() not in punctuation]
words = nltk.FreqDist(tweets_filtered)
print(len(words))
df_fdist = pd.DataFrame.from_dict(words, orient='index')
df_fdist.columns = ['Frequency']
df_fdist.index.name = 'Term'
print(df_fdist)
df_fdist.to_csv('C:/Users/leska/Desktop/Tweets2.csv')

所以我尝试标记数据框的文本列中的单词,以便对每个单词进行计数:

import pandas as pd
import numpy as np
import nltk
import string
import collections
from collections import Counter
nltk.download('stopwords')
sw= set(nltk.corpus.stopwords.words ('english'))
punctuation = set (string.punctuation)
data= pd.read_csv('C:/Users/leska/Desktop/tweets.csv.zip', compression='zip')

print (data.columns)
print (len(data.tweet_id))
tweets = data.text
test = pd.DataFrame(data)
test.column = ["text"]
# Exclude stopwords with Python's list comprehension and pandas.DataFrame.apply.
test['tweet_without_stopwords'] = test['text'].apply(lambda x: ' '.join([word for word in x.split() if word not in (sw)]))
print(test)
chirps = test.text
splitwords = [ nltk.word_tokenize( str(chirps) ) for chirps in chirps ]

tweets2 = pd.Series(splitwords)

words = nltk.FreqDist(tweets2)

print(len(words))
df_fdist = pd.DataFrame.from_dict(words, orient='index')
df_fdist.columns = ['Frequency']
df_fdist.index.name = 'Term'
print(df_fdist)
df_fdist.to_csv('C:/Users/leska/Desktop/Tweets2.csv')

这给了我以下错误:

TypeError:不可哈希类型:'list'

这里是完整的追溯: 追溯(最近一次通话):

文件“”,第1行,在 runfile('C:/Users/leska/.spyder-py3/temp.py',wdir ='C:/Users/leska/.spyder-py3')

runfile中的文件“ C:\ Users \ leska \ Anaconda3 \ lib \ site-packages \ spyder_kernels \ customize \ spydercustomize.py”,第827行 execfile(文件名,命名空间)

exec文件中第110行的文件“ C:\ Users \ leska \ Anaconda3 \ lib \ site-packages \ spyder_kernels \ customize \ spydercustomize.py” exec(compile(f.read(),文件名,'exec'),命名空间)

文件“ C:/Users/leska/.spyder-py3/temp.py”,第32行,在 单词= nltk.FreqDist(tweets2)

init 中的文件“ C:\ Users \ leska \ Anaconda3 \ lib \ site-packages \ nltk \ probability.py”,第108行 计数器。初始化(自己,示例)

init 中的第568行的文件“ C:\ Users \ leska \ Anaconda3 \ lib \ collections__init __。py” self.update(* args,** kwds)

文件“ C:\ Users \ leska \ Anaconda3 \ lib \ site-packages \ nltk \ probability.py”,第146行,已更新 super(FreqDist,self).update(* args,** kwargs)

文件“ C:\ Users \ leska \ Anaconda3 \ lib \ collections__init __。py”,第655行,已更新 _count_elements(自己,可迭代)

TypeError:不可散列的类型:“列表”

我很困惑,因为我将列表转换成系列。

最后,我需要将每个推文的单词频率保存到.csv文件中。

我对同时使用Python和Pandas非常陌生,因此感到很困惑。我在做什么错还是想念?

0 个答案:

没有答案