Используя numpy, как вы рассчитываете количество снегопадов в месяц?

У меня есть набор данных с записями о снегопадах за день в течение одного года. Переменная даты находится в форме ГГГГММДД.

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. Я также не могу импортировать дату и время, это нужно делать только с помощью numpy.

Вывод должен быть в таком виде

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

Мой вопрос: как мне подсчитать только количество дней, когда шел снег (в основном, когда переменная снега не равна 0), без необходимости делать это отдельно для каждого месяца?


person Saa17    schedule 31.10.2020    source источник


Ответы (1)


Я надеюсь, что вы можете использовать некоторые встроенные пакеты, такие как 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

Дайте мне знать, если это сработало для вас или у вас есть дополнительные вопросы.

person Ralubrusto    schedule 31.10.2020