Skip to content Skip to sidebar Skip to footer

Finding Maximum Temperature For Every Month In A Csv File?

I need some help. So I have a large csv file (+8785 rows) . So, what I basically need is to get every month's maximum temprature. For instance (output): Month Max Temperature Janu

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?"