如何按年份计算 pandas 数据框中最常出现的单词?
How to calculate most frequently occurring words in pandas dataframe column by year?
我有一个 pandas 数据框,其中包含一列 'reviews' 和一列 'year'。我想查看评论列中最常出现的前 100 个单词,但按年份过滤。所以,我想知道从2002年、2003年、2004年等等一直到2017年的前100名。
import pandas as pd
from nltk.corpus import stopwords
df=pd.read_csv('./reviews.csv')
stop = stopwords.words('english')
commonwords = pd.Series(' '.join(df['reviews']).lower().split()).value_counts()[:100]
print(commonwords)
df.to_csv('commonwords.csv', index=False)
上面的代码有效,但它只给出了所有年份中最常出现的前 100 个单词。
在创建 commonwords data-frame 之前,您可以像这样 df.groupby(['year', 'reviews'])
使用 groupby 操作创建另一个数据框。然后使用reset_index这个操作,这样就可以用来过滤前100了。
除了重置索引,您还可以参考answers in this question进一步的想法。
您可以使用:
df = pd.DataFrame({'reviews':['He writer in me great great me',
'great ambience the coffee was great',
'great coffee'],
'year':[2002,2004,2004]})
print (df)
reviews year
0 He writer in me great great me 2002
1 great ambience the coffee was great 2004
2 great coffee 2004
#change for 100 for top100 in real data
N = 3
df1 = (df.set_index('year')['reviews']
.str.lower()
.str.split(expand=True)
.stack()
.groupby(level=0)
.value_counts()
.groupby(level=0)
.head(N)
.rename_axis(('year','words'))
.reset_index(name='count'))
print (df1)
year words count
0 2002 great 2
1 2002 me 2
2 2002 he 1
3 2004 great 3
4 2004 coffee 2
5 2004 ambience 1
解释:
- 将
Series.str.lower
with Series.str.split
的值转换为小写 DataFrame
DataFrame.stack
重塑 MultiIndex Series
- 用
SeriesGroupBy.value_counts
计算每组的值,值已排序
- 通过
GroupBy.head
获得最高 N
值
- 数据清理 -
DataFrame.rename_axis
with DataFrame.reset_index
我有一个 pandas 数据框,其中包含一列 'reviews' 和一列 'year'。我想查看评论列中最常出现的前 100 个单词,但按年份过滤。所以,我想知道从2002年、2003年、2004年等等一直到2017年的前100名。
import pandas as pd
from nltk.corpus import stopwords
df=pd.read_csv('./reviews.csv')
stop = stopwords.words('english')
commonwords = pd.Series(' '.join(df['reviews']).lower().split()).value_counts()[:100]
print(commonwords)
df.to_csv('commonwords.csv', index=False)
上面的代码有效,但它只给出了所有年份中最常出现的前 100 个单词。
在创建 commonwords data-frame 之前,您可以像这样 df.groupby(['year', 'reviews'])
使用 groupby 操作创建另一个数据框。然后使用reset_index这个操作,这样就可以用来过滤前100了。
除了重置索引,您还可以参考answers in this question进一步的想法。
您可以使用:
df = pd.DataFrame({'reviews':['He writer in me great great me',
'great ambience the coffee was great',
'great coffee'],
'year':[2002,2004,2004]})
print (df)
reviews year
0 He writer in me great great me 2002
1 great ambience the coffee was great 2004
2 great coffee 2004
#change for 100 for top100 in real data
N = 3
df1 = (df.set_index('year')['reviews']
.str.lower()
.str.split(expand=True)
.stack()
.groupby(level=0)
.value_counts()
.groupby(level=0)
.head(N)
.rename_axis(('year','words'))
.reset_index(name='count'))
print (df1)
year words count
0 2002 great 2
1 2002 me 2
2 2002 he 1
3 2004 great 3
4 2004 coffee 2
5 2004 ambience 1
解释:
- 将
Series.str.lower
withSeries.str.split
的值转换为小写DataFrame
DataFrame.stack
重塑MultiIndex Series
- 用
SeriesGroupBy.value_counts
计算每组的值,值已排序 - 通过
GroupBy.head
获得最高 - 数据清理 -
DataFrame.rename_axis
withDataFrame.reset_index
N
值