Как найти значения Min и Max для строк в словаре при использовании DictReader в Python 3

1

В настоящее время я использую набор данных о погоде и пытаюсь найти минимальные и максимальные значения из данных. Я прочитал файл в упорядоченном словаре и могу выводить все мои номера, но мне было трудно найти правильные минимальные и максимальные значения. Ниже приведен образец одной из данных:

    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.

Заранее спасибо!

Теги:
csv
python-3.x
dictionary
ordereddictionary

1 ответ

1

Вы можете использовать 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню