Encontrar el valor máximo en un archivo CSV

Tenga una tarea de encontrar la precipitación promedio y máxima en el archivo ” BoulderWeatherData.csv “. Han encontrado el promedio usando este código:

rain = open("BoulderWeatherData.csv", "r") data = rain.readline() print(rain) data = rain.readlines() total = 0 linecounter = 0 for rain in data: linecounter = linecounter + 1 print("The number of lines is", linecounter) for line in data: r = line.split(",") total = total + float(r[4]) print(total) average = float(total / linecounter) print("The average rainfall is ", "%.2f" % average) 

Sin embargo, parece que no puede encontrar el máximo utilizando este mismo proceso. Se intentó utilizar la función max , pero la respuesta que debe obtenerse es un número flotante, que no se puede iterar hasta el máximo .

Cualquier ayuda sería apreciada.

Esta es mi forma preferida de manejar esto.

 #!/usr/bin/env python3 rain = open("BoulderWeatherData.csv","r") average = 0.0 total = 0 maxt = 0.0 for line in rain: try: p = float(line.split(",")[4]) average += p total += 1 maxt = max(maxt,p) except: pass average = average / float(total) print("Average:",average) print("Maximum:",maxt) 

Esto dará como resultado:

 Average: 0.05465272591486193 Maximum: 1.98 
 import csv INPUT = "BoulderWeatherData.csv" PRECIP = 4 # 5th column with open(INPUT, "rU") as inf: incsv = csv.reader(inf) header = next(incsv, None) # skip header row precip = [float(row[PRECIP]) for row in incsv] avg_precip = sum(precip, 0.) / (1 and len(precip)) # prevent div-by-0 max_precip = max(precip) print( "Avg precip: {:0.3f} in/day, max precip: {:0.3f} in/day" .format(avg_precip, max_precip) ) 

devoluciones

 Avg precip: 0.055 in/day, max precip: 1.980 in/day 
 max=0 for line in data: r = line.split(",") if float(r[4]) > max: max=float(r[4]) print(max) 

algo como eso

Ya estás acumulando total en iteraciones de bucle.

Para mantener un registro de un valor maxvalue , es básicamente lo mismo, excepto en lugar de agregar que estás max :

 total = 0 maxvalue = 0 for line in data: r = line.split(",") value = float(r[4]) total = total + value maxvalue = max(maxvalue, value) print(total) print(maxvalue) 

O, si no quieres usar la función max :

 for line in data: r = line.split(",") value = float(r[4]) total = total + value if value > maxvalue: maxvalue = value 

Este código intentará encontrar el valor máximo y el valor promedio de los flotadores almacenados en la quinta posición en un .csv.

 rainval = [] 

Inicializa la matriz vacía donde almacenaremos valores.

 with open ("BoulderWeatherData.csv", "r") as rain: 

Abre el archivo .csv y lo llama “lluvia”.

  for lines in rain: 

Esto lee todas las líneas en la lluvia hasta el final del archivo.

  rainval += [float(lines.strip().split(",")[4])] 

Agregamos el valor flotante que se encuentra en la quinta posición (cuarto índice) de la línea.

Repetimos lo anterior para cada línea ubicada en el archivo .csv.

 print (sorted(rainval)[len(rainval)]) 

Esto ordena los valores en la matriz rainval y luego toma el último valor (el más grande) y lo imprime. Este es el valor máximo y es mejor que el máximo porque puede manejar flotantes y no solo ints.

 print (sum(rainval)/len(rainval)) 

Esto imprime la precipitación media.


Alternativamente, si no queremos usar arrays:

 maxrain = -float("inf") total, count = 0, 0 with open ("test.txt", "r") as rain: for lines in rain: temp = float(lines.strip().split(",")[4]) if maxrain < temp: maxrain = temp total += temp count += 1 print (maxrain) print (total/count)