我正在尝试过滤下面的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-2018
和31-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
... ... ...
答案 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])