Дело тут не в пандасе, а в самих данных, они кривые. Универсального решения парсинга дат, наверное, не существует. Можно начать с пары автоматических вариантов, а потом руками или кастомными обработчиками.
1. Сообщения об ошибках позволят разделить проблемы на группы.
from dateutil import parser
spisok = ['25.05..2001', '25.06.2001', '25.43.2004', '05.02.2005', '27.02.2008']
for elem in spisok:
try:
d = parser.parse(elem, dayfirst=True)
print(f"{elem} -> {repr(d)}")
except parser.ParserError as err:
print(f"{elem} -> {err.__class__.__name__}: {err}")
25.05..2001 -> ParserError: Unknown string format: 25.05..2001
25.06.2001 -> datetime.datetime(2001, 6, 25, 0, 0)
25.43.2004 -> ParserError: month must be in 1..12: 25.43.2004
05.02.2005 -> datetime.datetime(2005, 2, 5, 0, 0)
27.02.2008 -> datetime.datetime(2008, 2, 27, 0, 0)
2. Более продвинутая версия парсера. В его настройках не разбирался.
import dateparser
spisok = ['25.05..2001', '25.06.2001', '25.43.2004', '05.02.2005', '27.02.2008']
for elem in spisok:
d = dateparser.parse(elem, languages=['ru'])
print(f"{elem} -> {repr(d)}")
25.05..2001 -> datetime.datetime(2001, 5, 25, 0, 0)
25.06.2001 -> datetime.datetime(2001, 6, 25, 0, 0)
25.43.2004 -> None
05.02.2005 -> datetime.datetime(2005, 2, 5, 0, 0)
27.02.2008 -> datetime.datetime(2008, 2, 27, 0, 0)