Как я могу удалить все строки в массиве на основе временного диапазона? - PullRequest
0 голосов
/ 28 февраля 2020

Вот мой вывод. Я хочу удалить все строки, когда рынок закрыт, независимо от даты. Поэтому удаляйте все строки с 21:00:00 до 14:30:00 (GMT) для каждого дня.

                          Open       High        Low      Close     Volume
Datetime                                                                  
2020-02-24 14:30:00  48.174999  48.200001  47.500000  47.770000  7004859.0
2020-02-24 14:31:00  47.830101  48.490002  47.689999  48.380402  1237115.0
2020-02-24 14:32:00  48.360100  48.630001  48.119999  48.610001   792655.0
2020-02-24 14:33:00  48.610001  48.660000  48.395000  48.619999   675367.0
2020-02-24 14:34:00  48.570000  48.570000  48.570000  48.570000   725846.0
...                        ...        ...        ...        ...        ...
2020-02-28 16:37:00  45.044998  45.389999  45.044998  45.369999   442847.0
2020-02-28 16:38:00  45.349998  45.410000  45.290001  45.400002   361566.0
2020-02-28 16:39:00  45.409302  45.540001  45.380001  45.500000   393467.0
2020-02-28 16:40:00  45.500000  45.509998  45.360001  45.420300   414059.0
2020-02-28 16:41:35  45.660000  45.660000  45.660000  45.660000        0.0

[1685 rows x 5 columns]

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

Один из способов сделать это:

start_time=pd.to_datetime("21:00:00").time()
stop_time=pd.to_datetime("14:30:00").time()

df = df[~(df['Datetime'].dt.time >= start_time) & ~(df['Datetime'].dt.time < stop_time)]

Примечания:

  • Во-первых, я устанавливаю две переменные для вашего временного интервала: start_time и stop_time. Они будут использоваться для фильтрации вашего фрейма данных.
  • Обратите внимание на () после pd.to_datetime("21:00:00").time(). Это важно для сравнения значений совместимых типов в последней строке. Вы поймете лучше, если немного поиграете с типами данных.
  • Также обратите внимание на ~ (побитовое НЕ), & и ( ) в последней строке; они указывают приоритет логического оператора условий фильтрации. Таким образом, последняя строка переводится как «включить все, что НЕ больше или равно x и НЕ меньше y». Существуют разные способы выполнить одну и ту же фильтрацию, но я придерживался условия, представленного в вопросе.
0 голосов
/ 28 февраля 2020

Это должно помочь вам начать (у вас мало данных), а затем просто изменить условие на то, что вам нужно? IE час <21 | (час> 14 и минута> 30)

>>> myList = [['2020-02-24 14:30:00' , 48.174999 , 48.200001 , 47.500000 , 47.770000 , 7004859.0],
... ['2020-02-24 14:31:00' , 47.830101 , 48.490002 , 47.689999 , 48.380402 , 1237115.0],
... ['2020-02-24 14:32:00' , 48.360100 , 48.630001  ,48.119999 , 48.610001 ,  792655.0],
... ['2020-02-24 14:33:00' , 48.610001,  48.660000 , 48.395000 , 48.619999 ,  675367.0],
... ['2020-02-24 14:34:00' , 48.570000 , 48.570000 , 48.570000 , 48.570000 ,  725846.0],
... ['2020-02-28 16:37:00' , 45.044998 , 45.389999 , 45.044998 , 45.369999 ,  442847.0],
... ['2020-02-28 16:38:00' , 45.349998 , 45.410000 , 45.290001 , 45.400002 ,  361566.0],
... ['2020-02-28 16:39:00' , 45.409302 , 45.540001 , 45.380001 , 45.500000 ,  393467.0],
... ['2020-02-28 16:40:00' , 45.500000 , 45.509998 , 45.360001 , 45.420300  , 414059.0],
... ['2020-02-28 16:41:35' , 45.660000 , 45.660000 , 45.660000 , 45.660000  ,      0.0]]
... 
>>> df = pd.DataFrame(myList, columns = ['Date','Open','High','Low','Close','Volume'])
>>> df['Date'] = pd.to_datetime(df['Date'])
>>> df[df.Date.dt.hour > 14]
                 Date       Open       High        Low      Close    Volume
5 2020-02-28 16:37:00  45.044998  45.389999  45.044998  45.369999  442847.0
6 2020-02-28 16:38:00  45.349998  45.410000  45.290001  45.400002  361566.0
7 2020-02-28 16:39:00  45.409302  45.540001  45.380001  45.500000  393467.0
8 2020-02-28 16:40:00  45.500000  45.509998  45.360001  45.420300  414059.0
9 2020-02-28 16:41:35  45.660000  45.660000  45.660000  45.660000       0.0
>>> print(df)
                 Date       Open       High        Low      Close     Volume
0 2020-02-24 14:30:00  48.174999  48.200001  47.500000  47.770000  7004859.0
1 2020-02-24 14:31:00  47.830101  48.490002  47.689999  48.380402  1237115.0
2 2020-02-24 14:32:00  48.360100  48.630001  48.119999  48.610001   792655.0
3 2020-02-24 14:33:00  48.610001  48.660000  48.395000  48.619999   675367.0
4 2020-02-24 14:34:00  48.570000  48.570000  48.570000  48.570000   725846.0
5 2020-02-28 16:37:00  45.044998  45.389999  45.044998  45.369999   442847.0
6 2020-02-28 16:38:00  45.349998  45.410000  45.290001  45.400002   361566.0
7 2020-02-28 16:39:00  45.409302  45.540001  45.380001  45.500000   393467.0
8 2020-02-28 16:40:00  45.500000  45.509998  45.360001  45.420300   414059.0
9 2020-02-28 16:41:35  45.660000  45.660000  45.660000  45.660000        0.0
>>>
...