Python 如何使用 While 循环分析 CSV 文件数据

How to analyze CSV file data with a While loop in Python

我正在尝试弄清楚如何在 Python 中启动一个遍历 csv 文件的循环。我相信这将是一个 while 循环(不能使用 pandas 进行此分配)但我不确定如何开始。该文件来自 Kaggle - 分析 Reddit 的一个页面试图获得以下内容:

所有 post 的平均评论数 所有 post 的平均分数 最高分是多少以及它的标题 post 最低分数是多少以及它的标题 post 评论最多 post 的是标题和评论数

这是我目前导入的文件:

import csv  #import csv file reddit_vm.csv

def analyze(entries):
    print(f'first entry: {entries[0]}')

with open("reddit_vm.csv", "r", encoding='UTF-8', errors="ignore") as input:
    entries = [(e['id'], int(e['score']), int(e['comms_num']), e['title']) for e in csv.DictReader(input)]
    avgScore = analyze(entries)

这就是我认为我需要做的:

伪代码:

需要一个变量来控制循环读取行 while 循环

所有 post 的平均评论数

所有 post 的平均分

最高分和打印标题的最大变量 最低分数的最小变量

most_comments

我强烈建议您为此使用 pandas。这些是基本操作:

import pandas as pd

df = pd.read_csv("filename.csv") #read csv file
print(df['comms_num'].mean()) # print mean number of comments, assuming they are integers
print(df['score'].mean()) # print score mean
df.sort_values('score', ascending=False).head(10) #sort the dataframe by score and display the first 10 rows

正如我们在评论中讨论的那样,简单的方法是逐行读取 csv 文件,然后使用循环将数据存储在包含列值的字典中,这样稍后进行聚合更容易:

with open('sample1.csv', 'r') as f:
    #read from csv line by line, rstrip helps to remove '\n' at the end of line
    lines = [line.rstrip() for line in f] 

columnslist = lines[0].split(',')
numcolumns = len(columnslist)  # the number of column

result_dict = {}

for colm in columnslist:
    result_dict[colm] = [] # this is for holding the columns values in a single list seperetely.


for line in lines[1:]:
    words = line.split(',') #get the list by comma delimited
    for i in range(numcolumns):
        result_dict[columnslist[i]].append(words[i]) # add in the result dict

print(result_dict)

例如,我有以下 CSV 文件:

打印语句将给出以下命令: {'name': ['Vag', 'Sam', 'Harris'], 'score': ['0.9', '0.12', '0.98'], 'roll': ['11', '12', '13']}

如您所见,我们在列表中包含了我们想要的内容,因此更易于分析。

max_score = max(result_dict["score"])
min_score = min(result_dict["score"])
print(max_score, min_score)
# 0.98 0.12

现在您可以做更多的事情,但是没有 pandas 会很麻烦。