Вывод не полного фрейма данных
Всем привет) Данным кодом читаю базу данных :
import pandas as pd
import numpy as np
from datetime import datetime
import sqlite3
import pytz
timezone = pytz.timezone("Etc/UTC")
utc_from = datetime(2021, 9, 13, tzinfo=timezone)
base = sqlite3.connect('base_eurousd.db')
cur = base.cursor()
read_db = cur.execute('SELECT * FROM data_eurusd').fetchall()
df = pd.DataFrame(read_db)
# d = pd.read_sql("select * from data", db_conn)
df[0] = pd.to_datetime(df[0], unit='ms')
df[3] = np.where(df[1].diff().lt(0) | df[2].diff().lt(0), df[3] * -1, df[3])
print(df)
что выводит мне ::
0 1 2 3
0 2021-09-13 06:42:21.259 1.18059 1.18061 6
1 2021-09-13 06:42:23.265 1.18058 1.18061 -2
2 2021-09-13 06:42:36.152 1.18058 1.18060 -4
3 2021-09-13 06:42:38.154 1.18058 1.18061 4
4 2021-09-13 06:42:41.407 1.18058 1.18059 -4
... ... ... ... ..
36863 2021-09-13 15:54:15.477 1.17847 1.17849 4
36864 2021-09-13 15:54:15.799 1.17847 1.17848 -4
36865 2021-09-13 15:54:16.857 1.17848 1.17849 6
36866 2021-09-13 15:54:16.968 1.17847 1.17849 -2
36867 2021-09-13 15:54:17.051 1.17846 1.17848 -6
вопрос: как можно сделать так, чтобы показывались данные только за последние 2 часа, или 2.5 часа? пользовался методом показа последних 10К строк и понял что это не то, что нужно. Т.к. за час может и 500 и 1000 строк данных прийти.
Ответы (2 шт):
Автор решения: CrazyElf
→ Ссылка
Pandas умная библиотека, она понимает прямое сравнение даты-времени. Пример:
import datetime
import pandas as pd
now = datetime.datetime.now()
dt2 = now - datetime.timedelta(hours=2)
print(dt2)
df = pd.DataFrame({0: [now - datetime.timedelta(minutes=i*30) for i in range(10)]})
df.loc[df[0] > dt2]
Вывод:
2021-09-13 11:35:16.752729
0
0 2021-09-13 13:35:16.752729
1 2021-09-13 13:05:16.752729
2 2021-09-13 12:35:16.752729
3 2021-09-13 12:05:16.752729
Автор решения: strawdog
→ Ссылка
Если у вас есть датафрейм такого типа (то есть, колонка с временем не является индексом):
0
0 2021-09-12 00:00:00
1 2021-09-12 01:00:00
2 2021-09-12 02:00:00
3 2021-09-12 03:00:00
4 2021-09-12 04:00:00
5 2021-09-12 05:00:00
. . .
32 2021-09-13 08:00:00
33 2021-09-13 09:00:00
34 2021-09-13 10:00:00
35 2021-09-13 11:00:00
36 2021-09-13 12:00:00
то сделать можно просто, например, получив записи за последние 2.5 часа (2.5H), считая от последней записи в датафрейме:
res = df.reset_index().set_index(0).last("2.5H").reset_index().set_index("index")
res = res.rename_axis(None)
res:
0
34 2021-09-13 10:00:00
35 2021-09-13 11:00:00
36 2021-09-13 12:00:00