How about something like this? Also, going forward, it will benefit you greatly to learn how to provide a properly formatted reproducible example.
from faker import Faker
from itertools import cycle
import pandas as pd
import random
fake = Faker()
#Create fake sample data
tides = cycle(['LW', 'HW'])
def create_rows_faker(num=1):
output = [{
"date_time":fake.date_time_between('-5d', 'now'),
"tide":next(tides),
"cm_NAP":random.randint(1000,2000)} for x in range(num)]
return output
df_faker = pd.DataFrame(create_rows_faker(20))
print(df_faker.sort_values(by='date_time'))
date_time tide cm_NAP
16 2021-03-02 16:47:11 LW 1146
14 2021-03-02 22:07:55 LW 1766
1 2021-03-03 00:08:37 HW 1242
7 2021-03-03 03:47:00 HW 1938
10 2021-03-03 20:24:51 LW 1910
8 2021-03-04 19:31:21 LW 1479
3 2021-03-04 19:53:18 HW 1079
13 2021-03-04 20:53:41 HW 1589
0 2021-03-05 22:14:16 LW 1093
15 2021-03-05 23:27:34 HW 1786
19 2021-03-06 00:08:59 HW 1034
17 2021-03-06 02:28:37 HW 1698
5 2021-03-06 04:39:14 HW 1922
4 2021-03-06 07:06:48 LW 1323
18 2021-03-06 07:48:38 LW 1445
9 2021-03-06 10:21:43 HW 1142
6 2021-03-07 02:01:23 LW 1209
11 2021-03-07 02:04:30 HW 1124
12 2021-03-07 06:35:49 LW 1538
2 2021-03-07 06:56:26 LW 1552
# Filter for today's date
print(df_faker[(df_faker['date_time'] > '2021-03-07 00:00:00')])
date_time tide cm_NAP
2 2021-03-07 06:56:26 LW 1552
6 2021-03-07 02:01:23 LW 1209
11 2021-03-07 02:04:30 HW 1124
12 2021-03-07 06:35:49 LW 1538
# filter for 2 days before and 2 days after some arbitrary date range
print(df_faker[(df_faker['date_time'] > '2021-03-05 00:00:00') & (df_faker['date_time'] < '2021-03-07 08:00:00')])
date_time tide cm_NAP
0 2021-03-05 22:14:16 LW 1093
2 2021-03-07 06:56:26 LW 1552
4 2021-03-06 07:06:48 LW 1323
5 2021-03-06 04:39:14 HW 1922
6 2021-03-07 02:01:23 LW 1209
9 2021-03-06 10:21:43 HW 1142
11 2021-03-07 02:04:30 HW 1124
12 2021-03-07 06:35:49 LW 1538
15 2021-03-05 23:27:34 HW 1786
17 2021-03-06 02:28:37 HW 1698
18 2021-03-06 07:48:38 LW 1445
19 2021-03-06 00:08:59 HW 1034