使用 numpy,你如何计算每月的降雪量?
Using numpy, how do you calculate snowfall per month?
我有一个数据集,其中记录了一年中每天的降雪量。日期变量采用 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
我想计算每个月下雪的天数。我知道如何使用 pandas 执行此操作,但对于学校项目,我只需要使用 numpy 即可。我也不能导入日期时间,它必须只使用 numpy 来完成。
输出应该是这种形式
Month # days snowed
January 13
February 19
March 20
...
December 15
我的问题是如何只计算下雪的天数(基本上当 snow 变量不为 0 时)而不必每个月单独计算?
我希望您可以使用一些 built-in 包,例如 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
让我知道这是否适合您,或者如果您有任何其他问题。
我有一个数据集,其中记录了一年中每天的降雪量。日期变量采用 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
我想计算每个月下雪的天数。我知道如何使用 pandas 执行此操作,但对于学校项目,我只需要使用 numpy 即可。我也不能导入日期时间,它必须只使用 numpy 来完成。
输出应该是这种形式
Month # days snowed
January 13
February 19
March 20
...
December 15
我的问题是如何只计算下雪的天数(基本上当 snow 变量不为 0 时)而不必每个月单独计算?
我希望您可以使用一些 built-in 包,例如 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
让我知道这是否适合您,或者如果您有任何其他问题。