根据日期和时间过滤数据框(在2个单独的列中)

时间:2018-05-31 02:19:23

标签: python pandas

我正在尝试过滤下面的pandas dataframe,根据我数据库中的最后一个dataframe向我提供更新的date & time

这是我尝试过滤的dataframe示例:

>>> df
  # The time is in '%H:%M:%S' format, and the date is in '%d-%b-%Y'
  Time      Date          Items
  00:05:00  29-May-2018   foo
  00:06:00  30-May-2018   barr
  00:07:00  31-May-2018   gaaa
  00:11:00  31-May-2018   raaa
  ...       ...           ...

我要做的是根据我的sql数据库中的最后一个条目过滤这个dataframe。例如,最后一个条目是:['20:05:00','30-May-2018']。以下代码是我用来从df过滤掉的代码:

last_entry = ['20:05:00','30-May-2018']
# Putting time into a datetime format to work within the dataframe.
last_entry_time = datetime.strptime(last_entry[0], '%H:%M:%S').time()
new_entry = df[(df['Date'] >= last_entry[1]) & (df['Time'] > last_entry_time)]

如果我只是将过滤器改为:new_entry = df[df['Date'] >= last_entry[1])],则可以根据上次日期返回当前日期和更新日期,即:30-May-201831-May-2018

但是,关于时间部分,因为我的last_entry时间是20:05:00,它会开始过滤掉我正在尝试收集的其余数据......

问题:

如何执行dataframe的过滤器,以便它返回数据框中的新条目,该条目基于数据库中的旧date and time

理想的结果

last_entry = ['20:05:00','30-May-2018']
>>> new_entry

  Time      Date          Items
  00:07:00  31-May-2018   gaaa
  00:11:00  31-May-2018   raaa
  ...       ...           ...

1 个答案:

答案 0 :(得分:1)

一种选择是在DataFrame中创建一个datetime列,然后对此列进行过滤,例如:

DELETE from abc where eventtime::date <=(CURRENT_TIMESTAMP-INTERVAL :DURATION)::date;
COMMIT;

您还需要将df["real_date"] = pd.to_datetime(df["Date"], format="%d-%b-%Y") df["real_time"] = pd.to_timedelta(df["Time"]) df["real_datetime"] = df["real_date"] + df["real_time"] 变量转换为正确的日期时间,例如:

last_entry

然后您可以像这样过滤新的DataFrame列:

from dateutil.parser import parse
from datetime import datetime


date = parse(last_entry[1], dayfirst=True)
time_elements = [int(t) for t in last_entry[0].split(":")]
last_entry_dt = datetime(date.year, date.month, date.day, time_elements[0], time_elements[1], time_elements[2])