代码必须在开始时间和结束时间之间选择行(结束时间是开始时间+ 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_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]
答案 0 :(得分:0)
以下代码应该可以使用。
df.loc[df['datetime'].dt.time.between(start_time.time(), end_time.time())]
请注意,datetime.strptime
返回一个datetime
对象(参见here),其中包含虚假的年,月和日信息,这些信息不应该用于比较问题。