我是 python 的初學者,我想從一個 csv 檔案中讀取一些名稱和成績,并在另一個 csv 檔案中寫入成績的平均值。我可以從 csv 檔案中讀取成績,但我不知道如何在另一個 csv 檔案中寫入均值 :((有沒有辦法在沒有像 Pandas 這樣的庫的幫助下撰寫此代碼?)
import csv
from os import name
from statistics import mean
with open(input_file_name) as f:
reader = csv.reader(f)
for row in reader:
name = row[0]
grades = row[1:]
these_grades1 = list()
for grade in grades:
these_grades1.append(int(grade))
mean1 = mean(these_grades1)
#print(name,float(mean1))
with open(output_file_name, 'w' , newline='') as new_f:
writer = csv.writer(new_f)
for row in reader:
writer.writerow("%s,%s" % (name, float(mean1)))
new_f.close()
名稱和等級:
marie,5,7,3,15
harry,3,9,4,20,9,1,8,16,0,5,2,4,7,2,1
john,19,10,19,6,8,14,3
sara,0,5,20,14
david,13,2,5,1,3,10,12,4,13,17,7,7
robert,1,9
james,0,16,16,13,19,2,17,8
正確的輸出:
marie,7.5
harry,6.066666666666666
john,11.285714285714286
sara,9.75
david,7.833333333333333
robert,5.0
james,11.375
uj5u.com熱心網友回復:
代碼有幾個問題:
- 您不斷覆寫
mean1,這意味著每次讀取新學生時都會丟失每個學生的平均值。使用串列跟蹤已計算的均值(這是result在我的代碼中)。 - 不知道為什么
reader在列印輸出時迭代 writerow接受一個串列作為輸入,而不是一個字串(如果你使用字串,它會列印得非常奇怪)
這是一個固定版本:
import csv
from os import name
result = []
with open(input_file_name) as f:
reader = csv.reader(f)
for row in reader:
name = row[0]
grades = row[1:]
for i, grade in enumerate(grades):
grades[i] = int(grade)
mean = sum(grades)/len(grades)
result.append([name, mean])
with open(output_file_name, 'w' , newline='') as new_f:
writer = csv.writer(new_f)
for row in result:
writer.writerow(row)
您也可以在沒有串列的情況下執行此操作:
import csv
from os import name
with open(input_file_name) as f, open(output_file_name, 'w' , newline='') as new_f:
reader = csv.reader(f)
writer = csv.writer(new_f)
for row in reader:
name = row[0]
grades = row[1:]
for i, grade in enumerate(grades):
grades[i] = int(grade)
mean = sum(grades)/len(grades)
writer.writerow([name, mean])
uj5u.com熱心網友回復:
這會給你適當的結果 https://replit.com/@arvindDhakad/SilkyMarriedCleaninstall#main.py
import csv
from os import name
from statistics import mean
#open both file here
with open(input_file_name) as f, open(output_file_name, 'w' , newline='') as new_f:
#initialize writer
writer = csv.writer(new_f)
#initialize reader
reader = csv.reader(f)
for row in reader:
name = row[0]
grades = row[1:]
these_grades1 = list()
for grade in grades:
these_grades1.append(int(grade))
# you don't need to calculate mean here
# calculate mean
mean1 = mean(these_grades1)
# write to file
writer.writerow([name, float(mean1)])
更多pythonic版本:
import csv
from statistics import mean
with open(input_file_name) as f, open(output_file_name, 'w',
newline='') as new_f:
#initialize writer
writer = csv.writer(new_f)
#initialize reader
reader = csv.reader(f)
writer.writerows([[row[0], mean(map(int, row[1:]))] for row in reader])
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/321813.html
下一篇:熊貓通過分隔符將單元格拆分為新行
