В настоящее время я использую набор данных о погоде и пытаюсь найти минимальные и максимальные значения из данных. Я прочитал файл в упорядоченном словаре и могу выводить все мои номера, но мне было трудно найти правильные минимальные и максимальные значения. Ниже приведен образец одной из данных:
OrderedDict([('STATION', 'USW00003894'), ('NAME', 'CLARKSVILLE OUTLAW AIRPORT, TN US'), ('DATE', '2002-07-20'), ('PRCP', 0.0), ('SNOW', None), ('SNWD', None), ('TAVG', 79.0), ('TMAX', 89.0), ('TMIN', 69.0)])
OrderedDict([('STATION', 'USW00003894'), ('NAME', 'CLARKSVILLE OUTLAW AIRPORT, TN US'), ('DATE', '2002-07-21'), ('PRCP', 0.12), ('SNOW', None), ('SNWD', None), ('TAVG', 82.0), ('TMAX', 92.0), ('TMIN', 71.0)])
OrderedDict([('STATION', 'USW00003894'), ('NAME', 'CLARKSVILLE OUTLAW AIRPORT, TN US'), ('DATE', '2002-07-22'), ('PRCP', 0.0), ('SNOW', None), ('SNWD', None), ('TAVG', 80.0), ('TMAX', 90.0), ('TMIN', 70.0)])
Есть несколько отсутствующих значений, которые я заменил типом данных none, и я бы не хотел включать ни одно, ни нулевые значения в мои вычисления.
Ниже приведен код, который у меня есть:
with open('Clarksville_weather_history.txt', newline='') as clarksWeather:
reader = csv.DictReader(clarksWeather)
for row in reader:
if len(row['PRCP']) > 0:
row['PRCP'] = float(row['PRCP'])
else:
row['PRCP'] = None
if len(row['SNOW']) > 0:
row['SNOW'] = float(row['SNOW'])
else:
row['SNOW'] = None
if len(row['SNWD']) > 0:
row['SNWD'] = float(row['SNWD'])
else:
row['SNWD'] = None
if len(row['TAVG']) > 0:
row['TAVG'] = float(row['TAVG'])
else:
row['TAVG'] = None
if len(row['TMAX']) > 0:
row['TMAX'] = float(row['TMAX'])
else:
row['TMAX'] = None
if len(row['TMIN']) > 0:
row['TMIN'] = float(row['TMIN'])
else:
row['TMIN'] = None
#result = min(reader, key=lambda x:x['PRCP'])
#print(result)
Любая помощь или руководство будут оценены. Все методы, которые я попытался, не позволяют мне эффективно анализировать данные. Я новичок в этом языке, и там, похоже, не так много, насколько это касается использования в DictReader.
Заранее спасибо!
Вы можете использовать min
/max
с выражением генератора, итератирующим ваши словари.
Вот пример:
from collections import OrderedDict
d1 = OrderedDict([('STATION', 'USW00003894'), ('NAME', 'CLARKSVILLE OUTLAW AIRPORT, TN US'), ('DATE', '2002-07-20'), ('PRCP', 0.0), ('SNOW', None), ('SNWD', None), ('TAVG', 79.0), ('TMAX', 89.0), ('TMIN', 69.0)])
d2 = OrderedDict([('STATION', 'USW00003894'), ('NAME', 'CLARKSVILLE OUTLAW AIRPORT, TN US'), ('DATE', '2002-07-21'), ('PRCP', 0.12), ('SNOW', None), ('SNWD', None), ('TAVG', 82.0), ('TMAX', 92.0), ('TMIN', 71.0)])
d3 = OrderedDict([('STATION', 'USW00003894'), ('NAME', 'CLARKSVILLE OUTLAW AIRPORT, TN US'), ('DATE', '2002-07-22'), ('PRCP', 0.0), ('SNOW', None), ('SNWD', None), ('TAVG', 80.0), ('TMAX', 90.0), ('TMIN', 70.0)])
res = max(d['PRCP'] for d in (d1, d2, d3))
print(res)
# 0.12