фильтрация кадра данных по дате и времени (в 2 отдельных столбцах) - PullRequest
0 голосов
/ 31 мая 2018

У меня есть следующие панды 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
  ...       ...           ...

Я пытаюсь отфильтровать это dataframe на основе последней записи вмоя база данных sqlНапример, последняя запись: ['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
  ...       ...           ...

1 Ответ

0 голосов
/ 31 мая 2018

Один из вариантов - создать столбец datetime в вашем DataFrame, а затем выполнить фильтрацию по этому столбцу, например:

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 в правильное значение datetime, чтобыПример, подобный следующему:

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])

Затем вы можете отфильтровать новый столбец DataFrame следующим образом:

df[df["real_datetime"] >= last_entry_dt]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...