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 会很麻烦。
我正在尝试弄清楚如何在 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 会很麻烦。