Vấn đề ở đây là làm thế nào bạn đang nhập dữ liệu. Không có chỉ số cho dù 04:00 là sáng hay chiều? nhưng dựa trên ý kiến của bạn, chúng tôi cần cho rằng đó là PM. Tuy nhiên đầu vào đang hiển thị nó là AM.
Để giải quyết điều này, chúng ta cần bao gồm hai điều kiện với mệnh đề OR.
- 9: 30-11: 59
- 0: 00-4: 00
Đầu vào:
df = pd.DataFrame({'date': {880551: '2015-07-06 04:00:00', 880552: '2015-07-06 04:02:00',880553: '2015-07-06 04:03:00', 880554: '2015-07-06 04:04:00', 880555: '2015-07-06 04:05:00'},
'open': {880551: 125.00, 880552: 125.36,880553: 125.34, 880554: 125.08, 880555: 125.12},
'high': {880551: 125.00, 880552: 125.36,880553: 125.34, 880554: 125.11, 880555: 125.12},
'low': {880551: 125.00, 880552: 125.32,880553: 125.21, 880554: 125.05, 880555: 125.12},
'close': {880551: 125.00, 880552: 125.32,880553: 125.21, 880554: 125.05, 880555: 125.12},
'volume': {880551: 141, 880552: 200,880553: 750, 880554: 17451, 880555: 1000},
},
)
df.head()
date open high low close volume
880551 2015-07-06 04:00:00 125.00 125.00 125.00 125.00 141
880552 2015-07-06 04:02:00 125.36 125.36 125.32 125.32 200
880553 2015-07-06 04:03:00 125.34 125.34 125.21 125.21 750
880554 2015-07-06 04:04:00 125.08 125.11 125.05 125.05 17451
880555 2015-07-06 04:05:00 125.12 125.12 125.12 125.12 1000
from datetime import time
start_first = time(9, 30)
end_first = time(11, 59)
start_second = time(0, 00)
end_second = time(4,00)
df['date'] = pd.to_datetime(df['date'])
df= df[(df['date'].dt.time.between(start_first, end_first)) | (df['date'].dt.time.between(start_second, end_second))]
df
date open high low close volume
880551 2015-07-06 04:00:00 125.0 125.0 125.0 125.0 141
Ở trên không phải là thực hành tốt, và tôi không khuyến khích sử dụng loại dữ liệu mơ hồ này. giải pháp thời gian dài là điền dữ liệu chính xác với am / pm.
Chúng tôi có thể đạt được nó theo hai cách trong trường hợp định dạng dữ liệu chính xác:
1) sử dụng datetime
from datetime import time
start = time(9, 30)
end = time(16)
df['date'] = pd.to_datetime(df['date'])
df= df[df['date'].dt.time.between(start, end)]
2) sử dụng giữa thời gian, chỉ hoạt động với chỉ số datetime
df['date'] = pd.to_datetime(df['date'])
df = (df.set_index('date')
.between_time('09:30', '16:00')
.reset_index())
Nếu bạn vẫn gặp phải lỗi, hãy chỉnh sửa câu hỏi của bạn theo cách tiếp cận từng dòng và lỗi chính xác.
date
. Bạn có thể chạy lệnh nàyprint(df['date'].map(type))
và gửi đầu ra của nó cho câu hỏi?