У меня есть одна программа на python 2.7, пытающаяся обновить ее до python 3.6.
Я обнаружил затруднение в функции df.apply
СТАРЫЙ Python 2.7 код:
date_cols = ['hour', 'begin_date', 'end_date']
df = df[df[date_cols].apply(_in_daterange, axis=1)]
Что я пытаюсь сделать в коде Python 3.6:
df = df[df[date_cols].apply(_in_daterange, axis=1)]
возвращает ошибку variables missing
Так что вместо этого я попробовал это на python 3.6:
df = df[df[date_cols].apply(lambda row: _in_daterange(row['hour'],row['begin_date'], row['end_date']), axis=1)]
Но это не даст мне такой же вывод.
# Function in_date_range
def in_daterange( date: datetime, start, end):
""" Checks a give date is in the range of two dates """
if isinstance(start, datetime) and isinstance(end, datetime):
return date >= start and date < end
else:
return False
Как выглядит фрейм данных:
hour begin_date end_date
0 2018-01-01 00:00:00 NaT NaT
1 2018-01-01 00:00:00 2018-01-02 11:29:00 2018-01-02 13:00:00
2 2018-01-01 00:00:00 NaT NaT
3 2018-01-01 00:00:00 NaT NaT
4 2018-01-01 00:00:00 NaT NaT
5 2018-01-01 00:00:00 NaT NaT
6 2018-01-01 00:00:00 NaT NaT
7 2018-01-01 00:00:00 NaT NaT
8 2018-01-01 00:00:00 2018-01-02 11:29:00 2018-01-02 13:00:00
hour
генерируется перед тем, как получить диапазон часов с двумя датами. Затем я выполняю слияние, чтобы получить, когда происходят события
Старая программа:
Новая программа: