2016-11-02 9 views
0

データファイル(.csv)内の各行の平均を計算し、その平均をリストとして返す関数を作成する必要があります。データファイル内の行の平均

私は一緒に追加された数値の値を取得することができましたが、データの各行の長さで除算し、返されるリストに結果を供給する方法を理解できません。

def line_averages(filename): 
    """ compute the average value for every line, and return the average 
    values in a list in the file "filename" """ 
    infile = open(filename, "r") 
    all_input = infile.read() 
    infile.close() 
    lines = all_input.split('\n')  # remove lines 
    for one_line in lines: 
     values = one_line.split(',') # remove commas 
     line_sum = 0 
     print(values) 
     for j in values: 
      line_sum = line_sum + float(j) 

アップデート:私はこのエラーを取得する

def line_averages(filename): 
""" compute the average value for every line, and return the average 
values in a list in the file "filename" """ 
f = open(filename, "r") 
x = f.read() 
f.close() 
no_lines = x.split('\n')  # remove lines 
means = [] 
for i in no_lines: 
    no_commas = i.split(',') # remove commas 
    average = sum(no_commas)/len(no_commas) 
    means.append(average) 
return means 

:何

In [22]: line_averages("data.csv") 
Traceback (most recent call last): 

File "<ipython-input-29-e2e3fddb5de5>", line 1, in <module> 
line_averages("data.csv") 

File "E:/Google Drive/python_files/training4.py", line 19, in line_averages 
average = sum(no_commas)/len(no_commas) 

TypeError: unsupported operand type(s) for +: 'int' and 'str' 

わからない以下の候補の1つあたりとして

これは私が持っている新しいコードであります間違った?

+0

.csvファイルのいくつかの行を表示してください。ありがとう。 – Ukimiku

+0

1,2 \ n 1,1,1,1 \ n -1,0,1 \ n 42,17 \ n 私は別々の線でそれらをやらせてはいけません.... –

+0

ありがとう。あなたの質問が答えを見つけましたが、それは思われる...よろしくご協力ありがとうございました – Ukimiku

答えて

0
return_list = [] 
... 
    average = sum(values)/len(values) 
    return_list.append(average) 

また、くださいは、説明変数名を使用します。一文字変数はスローアウェイインデックスでも問題ありませんが、永続的な意味を持つものではありません。あなたのコードに基づいて


スポイラー警告

# If you have the statistics package, use "mean" from that, instead. 
def mean(coll): 
    return float(sum(coll))/max(len(coll), 1) 

def line_averages(filename): 
    """ compute the average value for every line, and return the average 
    values in a list in the file "filename" """ 

    return [mean([int(values) for values in line.split(',')]) for line in open(filename)] 
+0

ありがとう!はい、申し訳ありませんが、私は脳ダンピングのようなものでしたので、ここに投稿する前に適切な変数を書き留めるべきでした。 –

+0

素晴らしい。これらの答えは正しい方向に動いてくれましたか?もしそうなら、あなたの好きなことを助けて "受け入れる"ものなら何でも投票してください。そうすれば、StackOverflowは問題を適切にアーカイブすることができます。 – Prune

+0

こんにちは私はそれを試したが、上記の "更新:"のようにエラーが発生しました –

0

、各行の要素の数はlen(c)で見つけることができます。このリストに

means = [] 

、その後append各計算された平均:

means.append(s/len(c)) 
あなたの現在のコードを使用してリストにこれらを追加する最も簡単な方法は、あなたのforループの前に空のリストを初期化するだろう

一般的にこれを行うより効率的な方法があります(「リストの理解」を検索してください)が、これはあなたを動かす最も速い方法です。