【问题标题】:How do I find the Min and Max values for rows within a dictionary while using DictReader in Python 3如何在 Python 3 中使用 DictReader 时找到字典中行的最小值和最大值
【发布时间】:2018-06-22 16:11:45
【问题描述】:

我目前正在使用一组天气数据,并试图从数据中找到最小值和最大值。我已将文件读入有序字典并可以输出我所有的数字,但我很难尝试输出正确的最小值和最大值。以下是其中一项数据的示例:

    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 数据类型,并且我不想在我的计算中包含 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 中的使用而言,似乎没有很多。

提前致谢!

【问题讨论】:

    标签: python python-3.x csv dictionary ordereddictionary


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2018-07-03
      • 1970-01-01
      • 1970-01-01
      • 2016-05-19
      • 2015-06-29
      • 1970-01-01
      • 1970-01-01
      • 2017-10-11
      相关资源
      最近更新 更多