2016-11-02 2 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) 

Update:

это новый код, который я, как за один из предложений ниже:

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' 

не уверен, что пошло не так?!

+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)) 

Есть более эффективные способы сделать это в целом (поиск «понимания списка»), но это должен быть самый быстрый способ добиться успеха.

Смежные вопросы