从日期时间列中按时间选择熊猫

时间:2019-06-07 00:08:46

标签: python pandas time

代码必须在开始时间和结束时间之间选择行(结束时间是开始时间+ 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用于创建比开始时间晚30分钟的end_time

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_timeend_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 :(得分:0)

以下代码应该可以使用。

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

请注意,datetime.strptime返回一个datetime对象(参见here),其中包含虚假的年,月和日信息,这些信息不应该用于比较问题。