在python中过滤日期列

时间:2018-06-05 08:47:52

标签: python pandas date datetime filtering

我是python的新手,我面临以下问题。我有一个由2列组成的数据框,其中一列是date(datetime64 [ns])。我想保留过去12个月内的所有记录。我的代码如下:

today=start_time.date()
last_year = today + relativedelta(months = -12)
new_df = df[pd.to_datetime(df.mydate) >= last_year]

当我运行它时,我收到以下消息: TypeError:类型对象2017-06-05

有什么想法吗? last_year似乎按以下格式给我提供了我想要的日期:2017-06-05

3 个答案:

答案 0 :(得分:1)

在pandas中创建一个时间增量对象以增加日期(12个月)。调用pandas.Timstamp('now')获取当前日期。然后创建一个date_range。以下是获取12个月月度数据的示例。

import pandas as pd
import datetime
list_1 = [i for i in range(0, 12)]
list_2 = [i for i in range(13, 25)]
list_3 = [i for i in range(26, 38)]

data_frame = pd.DataFrame({'A': list_1, 'B': list_2, 'C':list_3}, pd.date_range(pd.Timestamp('now'), pd.Timestamp('now') + pd.Timedelta           (weeks=53), freq='M'))

我们为当前日期创建时间戳,并将其作为开始日期输入。然后我们创建一个timedelta来将该日期增加53周(如果你愿意的话可以增加52周),它可以获得12个月的数据。以下是输出:

                              A   B   C
 2018-06-30 05:05:21.335625   0  13  26
 2018-07-31 05:05:21.335625   1  14  27
 2018-08-31 05:05:21.335625   2  15  28
 2018-09-30 05:05:21.335625   3  16  29
 2018-10-31 05:05:21.335625   4  17  30
 2018-11-30 05:05:21.335625   5  18  31
 2018-12-31 05:05:21.335625   6  19  32
 2019-01-31 05:05:21.335625   7  20  33
 2019-02-28 05:05:21.335625   8  21  34
 2019-03-31 05:05:21.335625   9  22  35
 2019-04-30 05:05:21.335625  10  23  36
 2019-05-31 05:05:21.335625  11  24  37

答案 1 :(得分:0)

尝试

today = datetime.datetime.now()

答案 2 :(得分:0)

您可以对pandas个对象使用datetime功能。语法通常更直观,无需额外导入。

last_year = pd.to_datetime('today') + pd.DateOffset(years=-1)

new_df = df[pd.to_datetime(df.mydate) >= last_year]

因此,我们需要查看您的所有代码以确定错误背后的原因;例如,如何定义start_time