Python代码:“Min”格式正确,但“Max”

2024-06-26 14:40:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试处理一个包含天气数据的csv文件

文件的组织方式是,第一列是年份,第二列是月份,第三列是月份的第几天,第四列是小时数(每天00到23),第五列是一年中每天每小时的露点温度。有些日子的温度值为每小时,有些日子的温度值为-999或缺少几个小时

我试图从每小时的数据中提取每天的最小值和最大值。为此,我有一个按月份排序的“if”语句来标识每月的天数。然后在if语句中,我按日期排序,从每小时数据中提取最小露点(minDP)和最大露点(maxDP)。要查找minDP和maxDP,我有单独的min&;具有相同参数的max函数:对于具有每小时数据的每个日期,如果露点大于-999,则返回最小值或最大值;否则,如果该天的所有每小时数据均为-999,则返回“M”表示“缺失”。minDP部分工作正常,但是,maxDP总是返回所有日期的缺失,我不明白为什么。在maxDP部分,如果我将“max”函数更改为“min”,它将成功返回min

for m in months:
    if m == '01' or m =='03' or m == '05' or m == '07' or m == '08' or m == '10' or m == '12':
         dates = ['01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31']
         for d in dates:

             # For each date extract the minimum dewpoint, print "M" if all values for the date are less than -999
             with open('samplehourlydata.txt', 'r') as f:
                reader = csv.reader(f)
                next(reader)     # Skip header
                MinDP = min(row[4] if row[1] == m and row[2] == d and int(row[4]) > -999 else 'M' for row in reader)

            # For each date extract the maximum dewpoint, print "M" if all values for the date are less than -999
             with open('samplehourlydata.txt', 'r') as f:
                reader = csv.reader(f)
                next(reader)  # Skip header
                MaxDP = max(row[4] if row[1] == m and row[2] == d and int(row[4]) > -999 else 'M' for row in reader)
                print(year, m, d, MinDP, MaxDP)

max参数正在执行if语句的“else”部分,这一事实使我认为它正在做我技术上告诉它要做的事情。然而,我在想,我决不能让它做我认为我是的事。然而,在maxDP部分简单地将“max”更改为“min”返回实际的min值这一事实似乎再次证明了该参数是有效的

如果有帮助,第一天的csv数据如下所示:

yyyy,mm,dd,hour,D.P.
2011,01,01,00, 27
2011,01,01,01, 28
2011,01,01,02, 27
2011,01,01,03, 26
2011,01,01,04, 26
2011,01,01,05, -999
2011,01,01,06, 28
2011,01,01,07, 27
2011,01,01,08, 28
2011,01,01,09, 29
2011,01,01,10, 31
2011,01,01,11, 34
2011,01,01,12, 37
2011,01,01,13, 39
2011,01,01,14, 40
2011,01,01,15, 42
2011,01,01,16, 44
2011,01,01,17, 43
2011,01,01,18, 43
2011,01,01,19, 43
2011,01,01,20, 43
2011,01,01,21, 42
2011,01,01,22, 44
2011,01,01,23, 44

错误maxDP的电流输出如下所示:

yyyy mm dd MinDP MaxDP
2011 01 01  26 M

谢谢你的意见


Tags: orcsvthe数据infordateif