Выбор панд по времени из столбца дата / время - PullRequest
0 голосов
/ 07 июня 2019

Код должен выбирать строки между временем начала и временем окончания (время окончания - время начала + 30 минут). Но он возвращает только пустой фрейм данных. Есть ли способ выбрать строки в столбце df['datetime'] только время прохождения?

import pandas as pd

import time
from datetime import datetime, date, time, timedelta

df = pd.read_csv('selcted_data.txt', sep='\t')

Программа использует данные, которые выглядят так:

print(df.head())
              datetime   mean    std  sum  1  2  3  ...  28  29  30  31  32  33  
0  2017-07-12 08:01:00  0.935  1.181   29  0  0  0  ...   2   2   0   0   1   1   
1  2017-07-12 08:02:00  1.161  1.214   36  0  0  0  ...   2   0   0   0   4   3   
2  2017-07-12 08:03:00  1.097  1.326   34  0  0  0  ...   0   4   0   0   4   2   
3  2017-07-12 08:04:00  0.903  1.044   28  0  0  0  ...   1   1   0   0   3   1   
4  2017-07-12 08:05:00  1.065  1.153   33  0  0  0  ...   1   0   0   0   1   2

Здесь введено start_time используется для создания end_time, что на 30 минут позже времени начала:

start= '10:21'  
start_time = datetime.strptime(start, '%H:%M')
end_time = start_time + timedelta(minutes=30) 

start_time = datetime.strftime(start_time, '%H:%M:%S')
end_time = datetime.strftime(end_time, '%H:%M:%S')

print(start_time)
print(end_time)
#10:21:00
#11:01:00

start_time и end_time передаются для выбора строк:

df['datetime'] = pd.to_datetime(df['datetime'])
mask = (df['datetime'] >= start_time) & (df['datetime'] <= end_time)

df = df.loc[mask]
df = df.set_index('datetime')
df = df.between_time(start_time, end_time)

Код возвращает пустой фрейм данных:

print(df.head())
Empty DataFrame
Columns: [datetime, mean, std, sum, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34]

1 Ответ

0 голосов
/ 07 июня 2019

Следующий код должен работать.

df.loc[df['datetime'].dt.time.between(start_time.time(), end_time.time())]

Обратите внимание, что datetime.strptime возвращает объект datetime (ср. здесь ) с фиктивной информацией о году, месяце и дне, котораяне следует использовать для сравнения по вашей проблеме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...