Использование функции карты в pandas - PullRequest
1 голос
/ 02 мая 2020

Я пытаюсь повторить этот анализ для моего города. Я на этапе, когда я скопировал и вставил функцию, чтобы вычислить дневные часы дневного света и добавить совокупный счет (недельный и дневной) к сгруппированному набору данных, а затем построить график.

Дело в том, что я считаю, что используемая здесь функция карты ведет себя странно (или что-то изменилось в версии pandas). Если я приведу, например, weekly.head(), программа возвращает в столбце hours_of_daylight этот вывод, в то время как я ожидаю число

            Total       East     West         daylight
Date                
2012-10-07  14292.0     7297.0   6995.0       <map object at 0x7f21afcc1ca0>
2012-10-14  16795.0     8679.0   8116.0       <map object at 0x7f21afcc1ca0>
2012-10-21  15509.0     7946.0   7563.0       <map object at 0x7f21afcc1ca0>
2012-10-28  13437.0     6901.0   6536.0       <map object at 0x7f21afcc1ca0>
2012-11-04  12194.0     6408.0   5786.0       <map object at 0x7f21afcc1ca0>

Конечно, после этого matplotlib говорит, что нет никаких чисел c данных для plot

Код

daily = data.resample('d').sum()
weekly = data.resample('w').sum()


def hours_of_daylight(date, axis=23.44, latitude=47.61):
    """Compute the hours of daylight for the given date"""
    diff = date - pd.datetime(2000, 12, 21)
    day = diff.total_seconds() / 24. / 3600
    day %= 365.25
    m = 1. - np.tan(np.radians(latitude)) * np.tan(np.radians(axis) * np.cos(day * np.pi / 182.625))
    m = max(0, min(m, 2))
    return 24. * np.degrees(np.arccos(1 - m)) / 180.

# add this to our weekly data
weekly['daylight'] = map(hours_of_daylight, weekly.index)
daily['daylight'] = map(hours_of_daylight, daily.index)

weekly.head()

и, для сюжета

weekly['daylight'].plot()
plt.ylabel('hours of daylight (Seattle)');

Можете ли вы помочь мне понять, что не так с этими строками кода и получить эффективный число как результат, а также график?

Ответы [ 2 ]

2 голосов
/ 02 мая 2020

Использование Index.map:

weekly['daylight'] = weekly.index.map(hours_of_daylight)
print (weekly)
              Total    East    West   daylight
Date                                          
2012-10-07  14292.0  7297.0  6995.0  11.045208
2012-10-14  16795.0  8679.0  8116.0  10.644852
2012-10-21  15509.0  7946.0  7563.0  10.255305
2012-10-28  13437.0  6901.0  6536.0   9.881095
2012-11-04  12194.0  6408.0  5786.0   9.527645

daily['daylight'] = daily.index.map(hours_of_daylight)
1 голос
/ 02 мая 2020

Вы можете либо попробовать функцию .filter (), указав в скобках указанные подробности c, либо использовать index.map () для получения структурированного DF. Я лично рекомендовал бы go для .filter ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...