Как преобразовать дату в DataFrame и найти соответствие даты?

С сайта yhoo finance вытягиваю данные. Необходимо проверить, находится ли текущая дата в списке дат.

Основная проблема в моем понимании, в разном типе данных для дат, но что с этим сделать не понимаю.

     Open time       High        Low    ...          Close  Volume  Adj Close
0   2020-09-01  75.680000  73.432098    ...      73.559601       0  73.559601
1   2020-09-02  75.790001  74.874001    ...      75.462700       0  75.462700
2   2020-09-03  75.608299  74.905899    ...      75.295197       0  75.295197
3   2020-09-06  76.226997  75.317299    ...      75.317299       0  75.317299
4   2020-09-07  76.549004  75.628998    ...      75.718102       0  75.718102
        ..         ...        ...        ...    ...            ...     ...        ...
183 2021-05-16  74.098000  73.749001    ...      73.957703       0  73.957703
184 2021-05-17  73.862000  73.597000    ...      73.782600       0  73.782600
185 2021-05-18  73.872002  73.526802    ...      73.671402       0  73.671402
186 2021-05-19  73.931900  73.431297    ...      73.731697       0  73.731697
187 2021-05-20  73.662003  73.335297    ...      73.469002       0  73.469002




'''Модуль для вытаскивания данных с классической биржи data_yahoo'''
import pandas as pd
import pandas_datareader as pdr
import datetime
import numpy as np
import plotly.graph_objects as go
from datetime import date,timedelta

curent_day=datetime.datetime.today()
start_day=datetime.date.today()-datetime.timedelta(3)

def yhoo_data_taker(asset, day, end_day=start_day):
   end_day = start_day - datetime.timedelta(day)
   print(start_day)
   try:
      day_set = pdr.get_data_yahoo(asset, start=end_day, end=start_day)
   except:
      return pd.DataFrame()#Если не сработало то вернем пустой дата фрейм

   #day_set=day_set[::1]
   day_set.reset_index(inplace=True)
   day_set=day_set.rename({'Date':'Open time'},axis='columns')
   PATTERN_IN ="%Y-%m-%d"
   #day_set['Open time']=pd.to_datetime(day_set['Open time'].values,format=PATTERN_IN)
   #day_set['Open time'] =day_set['Open time'].astype(np.datetime64)

   return day_set

if __name__=="__main__":
   end_day = start_day - datetime.timedelta(260)
   day_set=yhoo_data_taker("RUB=X",260)
   print(day_set)

   print(type(day_set["Open time"][-1::].values),type(np.datetime64(start_day)))

   #print((day_set,np.datetime64(start_day)))

   #print(day_set.loc[:,"Open time"])
   #day_set.loc[:,"Close"]=day_set["Close"].astype(datetime)
   print( ((start_day) in day_set.loc[:,"Open time"]))
   print((np.datetime64(start_day) in day_set["Open time"] ))
   print((np.datetime64(start_day)==day_set["Open time"][-1::] ))

Получаю вот такой результат:

>>[188 rows x 7 columns]
<class 'numpy.ndarray'> <class 'numpy.datetime64'>#Здесь тип данных, как видим он разный для даты и даты из таблицы
False # пробовал преобразование через astype
False # Вот это думал основное решение но результат отрицательный хотя тек дата есть.
187    True  #Когда идет просто сравнение последней даты из таблицы с текущей результат Tru
Name: Open time, dtype: bool

Хотелось бы найти вхождение даты в DataFrame через in, но почему то результат отрицательный. В инете пробовал разные преобразования, но видимо Python 3.7 ничего не работает. Я так понимаю что основная проблема в типе данных. Пробовал такое решение, но почему то вообще ничего не срабатывает и не преобразовывается:

   PATTERN_IN ="%Y-%m-%d"
   day_set['Open time']=pd.to_datetime(day_set['Open time'].values,format=PATTERN_IN) 

Ответы (1 шт):

Автор решения: MaxU

В Pandas/Numpy для даты и времени используется тип данных datetime64:

In [327]: day_set.dtypes
Out[327]:
Open time    datetime64[ns]
High                float64
Low                 float64
Open                float64
Close               float64
Volume                int64
Adj Close           float64
dtype: object

Для того чтобы выбрать записи из фрейма с совпадающей датой:

day_set.query("`Open time` == @start_day")
Out[316]:
     Open time       High        Low       Open      Close  Volume  Adj Close
187 2021-05-20  73.662003  73.335297  73.471802  73.469002       0  73.469002

Чтобы проверить входит ли дата в Pandas.Series (столбец DataFrame):

In [330]: day_set["Open time"].eq(pd.to_datetime(start_day)).any()
Out[330]: True

или так:

In [333]: not day_set.query("`Open time` == @start_day").empty
Out[333]: True
→ Ссылка