Finding Maximum Temperature For Every Month In A Csv File?
Solution 1:
Here's what I think would be a good way, because it avoids hardcoding many if not most values into the code required (so would work for any year, and uses locale-specific month names):
from calendar import month_name
import csv
from datetime import datetime
import sys
filename = 'weather_2012.csv'
max_temps = [-sys.maxsize] * 13# has extra [0] entrywithopen(filename, 'r', newline='') as csvfile:
reader = csv.reader(csvfile); next(reader) # skip header rowfor date, high_temp, *_ in reader:
month = datetime.strptime(date, '%Y-%m-%d %H:%M:%S').month
max_temps[month] = max(max_temps[month], float(high_temp))
print('Monthly Max Temperatures\n')
longest = max(len(month) for month in month_name) # length of longest month namefor month, temp inenumerate(max_temps[1:], 1):
print('{:>{width}}: {:5.1f}'.format(month_name[month], temp, width=longest))
Output:
Monthly Max Temperatures
January: 5.3
February: 6.1
March: 25.5
April: 27.8
May: 31.2
June: 33.0
July: 33.0
August: 32.8
September: 28.4
October: 21.1
November: 17.5
December: 11.9
Solution 2:
You have to find not one, but all twelve maxima. You could start with a list of month names and find the maximum for every month in this list. In your csv file, the month is in the character positions 5 to 6 of the first element.
With this data format …
Date/Time,Temp (C),Dew Point Temp(C),Rel Hum(%),Wind Spd(km/h),Visibility (km),Stn Press(kPa),Weather
2012-01-0100:00:00,-1.8,-3.9,86,4,8.0,101.24,Fog
2012-01-0101:00:00,-1.8,-3.7,87,4,8.0,101.24,Fog
2012-01-0102:00:00,-1.8,-3.4,89,7,4.0,101.26,"Freezing Drizzle,Fog"2012-01-0103:00:00,-1.5,-3.2,88,6,4.0,101.27,"Freezing Drizzle,Fog"2012-01-0104:00:00,-1.5,-3.3,88,7,4.8,101.23,Fog
… to be continued
… you could find the maxima with this program:
month=["January","February","March","April","May","June","July",
"August","September","October","November","December"]
maxt = {}
withopen("weather_2012.csv","r") as temp:
for line in temp:
try: # is there valid data in line?
m0, p0, *junk = line.split(",")
p = float(p0)
m = month[int(m0[5:7])-1]
try: # do we already have data for this month?
maxt[m] = max (p, maxt[m])
except: # first data of this month
maxt[m] = p
except: # skip this linepassprint("Maxima:")
for m in month:
print("%s: %g"%(m,maxt[m]))
Solution 3:
Another solution could be like that:
#-*- coding: utf-8 -*-import csv
import datetime
import itertools
import collections
fd = open('weather_2012.csv', 'rb')
reader = csv.DictReader(fd, delimiter=',')
rows = []
for row in reader:
row['yearmonth'] = datetime.datetime.strptime(row['Date/Time'], '%Y-%m-%d %H:%M:%S').strftime('%Y%m')
rows.append(row)
fd.close()
# sort them
rows.sort(key=lambda r: r['yearmonth'])
ans = collections.OrderedDict()
for yearmonth, values in itertools.groupby(rows, lambda r: r['yearmonth']):
ans[yearmonth] = max([float(r['Temp (C)']) for r in values])
print ans
This solutions firsts sorts the data based on yearmonth string and then uses groupby builtin function.
Solution 4:
First you have to filter each value by each month in your first column, then you can find the max temp to each month
Hope that the next code can helps you:
import csv
months= {
"01": "January",
"02": "February",
"03": "March",
"04": "April",
"05": "May",
"06": "June",
"07": "July",
"08": "August",
"09": "September",
"10": "October",
"11": "November","12": "December"
}
weather_file = csv.DictReader(open("weather_2012.csv", 'r'), delimiter=',', quotechar='"')
results = {}
for row in weather_file:
# get month
month = row["Date/Time"].split(" ")[0].split("-")[1]
ifnot (month in results):
results[month] = {
"max": float(row["Temp (C)"])
}
continueiffloat(row["Temp (C)"]) > results[month]["max"]:
results[month]["max"] = float(row["Temp (C)"])
# ordering and showingprint"Max temp by month:"for month insorted(results, key=lambda results: results):
# do some stuff about month, to this case only showprint"%s: %.2f" % (months[month], results[month]["max"])
Output:
Max temp by month:
January: 5.3
February: 6.1
March: 25.5
April: 27.8
May: 31.2
June: 33.0
July: 33.0
August: 32.8
September: 28.4
October: 21.1
November: 17.5
December: 11.9
Post a Comment for "Finding Maximum Temperature For Every Month In A Csv File?"