首页 > 解决方案 > pandas 在 2.7 和 3.6 上应用功能

问题描述

我在 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之前生成以获得给定两个日期的小时范围。然后我执行合并以获取事件发生的时间

旧程序:

新节目:

标签: pythonpandas

解决方案


推荐阅读