【发布时间】:2019-03-28 08:55:41
【问题描述】:
我有一个数据框,其中包含 11 年的最高和最低温度数据(2005 年到 2015 年)。我试图找出 10 年期间每一天的最高和最低温度。
我从数据中删除了 2 个闰日,即 2008-02-29 和 2012-02-29,但是当我将 dayofyear 应用于数据时,它返回 366 行,我不知道为什么。
我已经分解了步骤并测试了每个部分。当我应用 dayofyear 时,闰日日期绝对不在数据框中
在我删除闰日并使用以下方法检查后:
dfmax['2008-02-26':'2008-03-02']
2 月 29 日不在那里。
下一步是按年份聚合日期以获得最高温度:
maxtemp = dfmax.groupby(dfmax.index.dayofyear).aggregate(max)
从
maxtemp.info()
我明白了:
Int64Index:366 个条目,1 到 366
我预计有 365 个条目。我做错了什么?
【问题讨论】:
-
我不记得 Pandas 的具体年份,但从逻辑上考虑...非闰年应该有 0...364 天。闰年有 0...365。如果您删除 2 月 29 日(一年中的第 59 天)而不将后面的日期向前滑动,则闰年将有 0...365 而没有 59。3 月 1 日是闰年的第 60 天,但非闰年的第 59 天。因此,您的数据应该包含一年中的所有日期,0...365(即 366 个条目)。
-
感谢 Amadan,但我在应用 groupby 之前删除了闰日,所以我不明白为什么会有任何数据滑动。 dfmax 数据框中的总行数是 4015,即 11*365,所以我希望它能给我 365 行和 dayofyear。
-
您有 11*365 行,但其中有 366 个不同的值。 1 月 1 日 => 0、2 月 28 日 => 58、2 月 29 日闰 => 59、3 月 1 日非闰 => 59、3 月 1 日 => 60、12 月 31 日非闰 => 364、12 月 31 日闰年 => 365。如果你想有 365 个不同的值,你需要从闰年 2 月 29 日之后的所有日期中减去 1,你说你没有这样做。
-
刚刚去掉了聚合函数,发现了一些有趣的东西,即
maxtemp = dfmax.groupby(dfmax.index.dayofyear)查看每一行的大小,我得到365 of 11,第366条记录是2。第366行的值不对应在任何闰日都有最高温度。似乎该函数将丢失的闰日补回来了? -
你确定你得到了 11 个中的 365 个吗?我认为您在第 60 个 (
[59]) 时只会看到 9 个,而不是 11 个。