Сравнение даты и времени в Python - PullRequest
1 голос
/ 19 марта 2020

У меня есть столбец даты и времени, и мне нужно найти записи, где время находится между 9:30 и 17:00 любого дня. Я не беспокоюсь о дате, но мне нужно отфильтровать данные по времени.

2018-12-28 10:53:24.950
2018-12-28 10:53:55.010
2019-01-02 16:48:31.593
2019-01-02 16:48:31.593
2019-01-02 16:48:31.593

Я использую следующую команду для извлечения часов.

df1['hour_of_timestamp'] = df1['User_date'].dt.hour

Ответы [ 3 ]

1 голос
/ 19 марта 2020

Pandas имеет встроенный метод, between_time() для выбора строк в течение определенного периода времени, но он работает только в объекте datetime, который является индексом (или, недавно, столбцом).

Поскольку у вас уже есть столбец datetime, вы можете извлечь строки следующим образом (адаптируя пример из здесь ):

import pandas as pd

data = [["20090102 04:51:00", 89.9900, 89.9900, 89.9900, 89.9900, 100], ["20190102 05:36:00", 90.0100, 90.0100, 90.0100, 90.0100, 200], ["20090102 05:44:00", 90.1400, 90.1400, 90.1400, 90.1400, 100], ["20090102 05:50:00", 90.0500, 90.0500, 90.0500, 90.0500, 500], ["20090102 05:56:00", 90.1000, 90.1000, 90.1000, 90.1000, 300], ["20090102 05:57:00", 90.1000, 90.1000, 90.1000, 90.1000, 200]]

# Building sample dataframe with Datetime column
df = pd.DataFrame(data)
df.columns = ["Datetime", "1", "2", "3", "4", "5"]
df['Datetime'] = pd.to_datetime(df['Datetime'], format="%Y%m%d %H:%M:%S")

# Extract rows with datetime matching index range
print(df.set_index("Datetime").between_time('5:30:00', '5:45:00'))

Это выводит только записи между диапазон времени.

                         1      2      3      4    5
Datetime                                            
2019-01-02 05:36:00  90.01  90.01  90.01  90.01  200
2009-01-02 05:44:00  90.14  90.14  90.14  90.14  100
0 голосов
/ 19 марта 2020

Если ваши даты всегда в формате ГГГГ-ММ-ДД, то почему бы просто не нарезать строку так, чтобы получить время:

time_str = date_str[10:].strip()

Тогда вы можете просто отсортировать список раз с помощью sorted(time_list) и ищите время с 9:30 до 17:00.

0 голосов
/ 19 марта 2020

Вы можете проанализировать ваши даты с d = datetime.datetime.fromisoformat(date_str). И тогда вы можете проверить d.hour и d.minute, чтобы принять решение.

...