Панды применяют функцию на 2.7 и 3.6 - PullRequest
0 голосов
/ 30 августа 2018

У меня есть одна программа на 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 генерируется перед тем, как получить диапазон часов с двумя датами. Затем я выполняю слияние, чтобы получить, когда происходят события

Старая программа:

  • питон 2.7
  • Панды 0,18

Новая программа:

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