2

我有一个 csv 文件,其中包含酒店列表及其星级(1 星到 5 星)。
B 列包含每家酒店的星级评分,从第 2 行开始(第 1 行是标题“评论星级”),每个单元格一个星级值 (1 - 5)。
我需要为 Python (v.3.6.4) 编写一个脚本来计算“5”在“评论星”列中出现的次数。因此,获得 5 星评级的公司数量。例如,如果我有 2000 家酒店,其中 800 家有 5 星评级,我需要 python 返回“800”。

到目前为止,我已经写过:

import csv
from decimal import *
import math
import pandas as pd

with open('ServiceReviews.csv', 'r') as f:
data = csv.reader(f)
for row in f:
    CustomerEmail = row[0]
    ReviewStars = row[1]
    ReferenceID = row[2]
    BusinessUnitID = row[3]
    Tags = row[4]
    for value in ReviewStars:
        df = pd.DataFrame({'5':list(ReviewStars)})
        fives = df['5'].value_counts()
        print (fives)

这将返回所有“5”的列表,但不是总数。我已经尝试了其他几个熊猫电话。有人有什么新见解吗?

4

2 回答 2

2

这里不需要熊猫。您可以collections.Counter从标准库中使用:

import csv
from collections import Counter

with open('ServiceReviews.csv', 'r') as f:
    c = Counter(row[1] for row in csv.reader(f))

Counter对象c将是一个计数字典,其中星数作为键,相应的计数作为值。所以你可以c[5]用来提取5*酒店的数量。

于 2018-06-14T14:03:08.360 回答
0
import pandas as pd
df = pd.read_csv('ServiceReviews.csv')
df_result = df[df['ReviewStars'] == 5]
print(len(df_result))

或者

import pandas as pd
df = pd.read_csv('ServiceReviews.csv')
df_result = df[df['ReviewStars'] == 5].count()
print(df_result)
于 2018-06-14T14:02:36.163 回答