В этом вопросе: сначала я прочитал оценки из файла csv, а затем сохранил элемент в следующем коде в списке lw. Я хочу записать список lw в файл csv. Как я могу это сделать?

Я прочитал оценки из файла csv под названием alaki.csv:

mandana,5,7,3,15
hamid,3,9,4,20,9,1,8,16,0,5,2,4,7,2,1
sina,19,10,19,6,8,14,3
sara,0,5,20,14
soheila,13,2,5,1,3,10,12,4,13,17,7,7
ali,1,9
sarvin,0,16,16,13,19,2,17,8
import csv
# For the average
from statistics import mean 
import operator
from collections import Counter
def calculate_average_of_averages(input_file_name, output_file_name):
#output_file_name=chert.csv
    with open(input_file_name) as d:
        se = csv.reader(d)
        l = {}
        for ldf in se:
            name = ldf[0]
            lsd = mean([float(sd) for sd in ldf[1:]])
            l[name] = lsd
        with open(output_file_name,'w') as ff:
            fd = csv.writer(ff)
        a = list(l.values())
        lw = []
        m = mean(a)
        lw.append(m)
        
            
        
        
calculate_average_of_averages('alaki.csv','chert.csv')

Вывод в csv файле:

8.401530612244898

Пожалуйста помогите

1
Mobodev 5 Дек 2020 в 20:21

3 ответа

Лучший ответ

Как насчет этого:

import csv
# For the average
from statistics import mean 
import operator
from collections import Counter


def calculate_average_of_averages(input_file_name, output_file_name):
#output_file_name=chert.csv
    with open(input_file_name) as d:
        se = csv.reader(d)
        l = {}
        for ldf in se:
            name = ldf[0]
            lsd = mean([float(sd) for sd in ldf[1:]])
            l[name] = lsd
    m = mean(list(l.values()))
    l["average_of_average"]=m   
    with open(output_file_name,'w') as ff:
        for name,value in l.items():
           ff.write("{},{}\n".format(name,value))
        
calculate_average_of_averages('alaki.csv','chert.csv')

Вывод выглядит так:

mandana,7.5
hamid,6.066666666666666
sina,11.285714285714286
sara,9.75
soheila,7.833333333333333
ali,5.0
sarvin,11.375
average_of_average,8.401530612244898

Для вывода только average_of_average

Заменить блок записи:

with open(output_file_name,'w') as ff:
   ff.write(l['average_of_average'])
0
sudhish 5 Дек 2020 в 18:14

Вы можете использовать библиотеку pandas, добавив эти 2 строки

import csv
import pandas as pd
# For the average
from statistics import mean 
import operator
from collections import Counter
def calculate_average_of_averages(input_file_name, output_file_name):
    with open(input_file_name) as d:
        se = csv.reader(d)
        l = {}
        for ldf in se:
            name = ldf[0]
            lsd = mean([float(sd) for sd in ldf[1:]])
            l[name] = lsd
        
        a = list(l.values())
        lw = []
        m = mean(a)
        lw.append(m)

        pd.DataFrame(lw,columns=["yourColumn"]).to_csv(output_file_name+".csv")
        
            
        
        
calculate_average_of_averages('alaki.csv','chert.csv')
0
fluffykitten 5 Дек 2020 в 17:28

Я не уверен, что писатель CSV должен писать только одну строку.

import csv
from statistics import mean

def calculate_mean_of_means(input_file, output_file):
    with open(input_file, newline='') as csvfile: 
        csvreader = csv.reader(csvfile)
        ls = {}
    
        for row in csvreader:
            str_to_int = [int(i) for i in row[1:]]
            ls[row[0]] = str_to_int
    
    total_means = 0
    
    for score in ls.values():
        total_means += mean(score)
        
    mean_of_means = [total_means / len(ls)]
    
    with open(output_file, 'w', newline='') as csvfile:
        meanwriter = csv.writer(csvfile)
        meanwriter.writerow(mean_of_means)

calculate_mean_of_means('alaki.csv', 'chert.csv')
0
syohey 5 Дек 2020 в 22:07