[英]Split a list that's in a file
所以我有一個包含多行的文本文件,每行都有名稱,年級和出生年月或一個學生,以半冒號分隔
如何制作一個函數,使其對每一行中的所有第二個項目求和,然后取平均值?
例如,
mary; 0; 1995
jay; 50; 1995
classAverage = 25
真的很困惑。
到目前為止,這是我的代碼,它沒有給我錯誤,但是當我打印時,它說<function classAverage at 0x0000000004C1ADD8>
from kiva.constants import LINES
def process(name):
f = open(name)
answer = []
for line in f:
answer.append(line.strip())
return answer
def classAverage(data):
data = process(filename)
data.split()
adding = []
for line in data:
adding = adding + data[1]
return adding/(line)
if __name__ == '__main__':
filename = "grades.txt"
data = process(filename)
for each in data:
print each
print classAverage(data)
#print "Average grade is ", classAverage(data)
year1 = 1995
year2 = 1997
print "Number born from ",year1,"to",year2,"is",
#print howManyInRange(data, year1, year2)
def ave(x):
return sum(x) / len(x)
with open(name, newline='') as csvfile:
print(ave([float(row[1]) for row in csv.reader(csvfile, dilimeter=';')]))
運行該代碼時出現錯誤,但是如果使用“ print classAverage”而不是“ print classAverage(data)”,則會得到該輸出,因此也許您復制的版本與產生該輸出的版本略有不同。
您的代碼中有幾個問題。 首先是data是一個列表,您正在嘗試調用data.split()。 您也永遠不會用“;”分隔文本 並且您的平均公式已關閉。 我做了一些細微的調整,以使其能夠執行我認為您打算的操作:
def process(name):
f = open(name)
answer = []
for line in f:
answer.append(line.strip().split(';'))
return answer
def classAverage(data):
adding = 0.0
for line in data:
adding = adding + float(line[1])
return adding / len(data)
if __name__ == '__main__':
filename = "grades.txt"
data = process(filename)
for each in data:
print each
print classAverage(data)
# print "Average grade is ", classAverage(data)
year1 = 1995
year2 = 1997
print "Number born from ", year1, "to", year2, "is",
# print howManyInRange(data, year1, year2)
也就是說,pandas非常擅長解析數據文件,然后計算數據指標。 使用pandas解析文件僅需一行。 這是使用pandas的等效代碼:
import pandas as pd
if __name__ == '__main__':
df = pd.read_table('grades.txt', sep=';', names=['name', 'score', 'year'])
print 'Average score = ', df.score.mean()
year1 = 1995
year2 = 1997
print "Number born from ", year1, "to", year2, "is", df[(df.year >= year1) & (df.year <= year2)].name.count()
輸出:
Average score = 25.0
Number born from 1995 to 1997 is 2
您應該像這樣修改函數classAverage:
def classAverage(data):
# you do not need to re-process the file, just use the data
adding = []
for line in data:
line = line.split(';')
adding.append(float(line[1].strip()))
return sum(adding) / len(adding)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.