使用numpy,您如何计算每月降雪量?

问题描述

我有一个数据集,其中包含一年的每天降雪记录。日期变量采用YYYYMMDD格式。

Date      SNow
20010101  0
20010102  10
20010103  5
20010104  3
20010105  0
...
20011231  0

实际数据在这里

https://github.com/emily737373/emily737373/blob/master/COX_SNOW-1.csv

我想计算每个月下雪的天数。我知道如何用熊猫来做到这一点,但是对于一个学校项目,我只需要使用numpy就能做到。我也无法导入datetime,必须仅使用numpy来完成。

输出应采用这种形式

    Month     # days sNowed
    January   13   
    February  19
    march     20
    ...
    December  15

我的问题是我如何只计算下雪天数(基本上当sNow变量不为0时),而不必每月分别进行计算?

解决方法

我希望您可以使用一些内置软件包,例如datetime,因为它在处理日期时间对象时很有用。

import numpy as np
import datetime as dt

df = np.genfromtxt('test_files/COX_SNOW-1.csv',delimiter=',',skip_header=1,dtype=str)

date = np.array([dt.datetime.strptime(d,"%Y%m%d").month for d in df[:,0]])
snow = df[:,1].copy().astype(np.int32)

has_snowed = snow > 0

for month in range(1,13):
    month_str = dt.datetime(year=1,month=month,day=1).strftime('%B')
    how_much_snow = len(snow[has_snowed & (date == month)])
    print(month_str,':',how_much_snow)

我将数据加载为str,因此我们保证以后可以将Date列解析为日期。这就是为什么我们还需要将snow列显式转换为int32的原因,否则>比较将不起作用。

输出如下:

January : 13
February : 19
March : 20
April : 13
May : 8
June : 9
July : 2
August : 7
September : 9
October : 19
November : 16
December : 15

让我知道这是否对您有用,或者您还有其他问题。