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

Python 使用numpy,您如何计算每月的降雪量?,python,arrays,numpy,snow,Python,Arrays,Numpy,Snow,我有一个数据集,有一年内每天的降雪记录。日期变量的格式为YYYYMMDD Date Snow 20010101 0 20010102 10 20010103 5 20010104 3 20010105 0 ... 20011231 0 实际数据在这里 我想计算一下每个月下雪的天数。我知道如何处理熊猫,但对于一个学校项目,我只需要使用numpy。我也不能导入datetime,它只能使用numpy来完成 输出应为这种形式 Month # days snowe

我有一个数据集,有一年内每天的降雪记录。日期变量的格式为YYYYMMDD

Date      Snow
20010101  0
20010102  10
20010103  5
20010104  3
20010105  0
...
20011231  0
实际数据在这里

我想计算一下每个月下雪的天数。我知道如何处理熊猫,但对于一个学校项目,我只需要使用numpy。我也不能导入datetime,它只能使用numpy来完成

输出应为这种形式

    Month     # days snowed
    January   13   
    February  19
    March     20
    ...
    December  15

我的问题是,我如何只计算下雪的天数(基本上当snow变量不是0时),而不必每个月单独计算?

我希望您可以使用一些内置软件包,例如
datetime
,因为它在处理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

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

我希望您可以使用一些内置软件包,例如
datetime
,因为它在处理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
让我知道这是否对你有效,或者如果你有任何进一步的问题