See pd.to_datetime
It operates in a vectorized manner so can convert all dates quickly.
df["Dates"] = pd.to_datetime(df["Dates"])
If there are strings that won't convert to a datetime and you want them nullified, you can use errors="coerce"
df["Dates"] = pd.to_datetime(df["Dates"], errors="coerce")
import spacy # 3.4.2
from spacy import displacy
nlp = spacy.load("en_core_web_sm")
eg_txt = "today is january 26, 2016. Tomorrow is january 27, 2016"
doc = nlp(eg_txt)
displacy.render(doc, style="ent")

We can apply the spacy logic to a dataframe
import pandas as pd # 1.5.1
# some fake data
df = pd.DataFrame({
"text": ["today is january 26, 2016. Tomorrow is january 27, 2016",
"today is january 26, 2016.",
"Tomorrow is january 27, 2016"]
})
# convert text to spacy docs
docs = nlp.pipe(df.text.to_numpy())
# unpack the generator into a series
doc_series = pd.Series(docs, index=df.index, name="docs")
df = df.join(doc_series)
# extract entities
df["entities"] = df.docs.apply(lambda x: x.ents)
# explode to one entity per row
df = df.explode(column="entities")
# build dictionary of ent type and ent text
df["entities"] = df.entities.apply(lambda ent: {ent.label_: ent.text})
# join back with df
df = df.join(df["entities"].apply(pd.Series))
# convert all DATE entities to datetime
df["dates"] = pd.to_datetime(df.DATE, errors="coerce")
# back to one row per original text and a container of datetimes
df = df.groupby("text").dates.unique().to_frame().reset_index()
print(df)
text dates
0 Tomorrow is january 27, 2016 [NaT, 2016-01-27T00:00:00.000000000]
1 today is january 26, 2016. [2022-11-17T11:42:49.607705000, 2016-01-26T00:...
2 today is january 26, 2016. Tomorrow is january... [2022-11-17T11:42:49.605705000, 2016-01-26T00:...
NaT?