Поскольку ваш формат даты является допустимым целым числом, вероятно, проще всего проверить действительные даты непосредственно из целочисленного значения, например:
Код:
def valid_date(date):
if not isinstance(date, int):
try:
date = int(date)
except ValueError:
return False
month_day, year = divmod(date, 10000)
month, day = divmod(month_day, 100)
try:
dt.datetime(year=year, month=month, day=day)
return True
except ValueError:
return False
Drop Строки:
df[df.date.apply(valid_date)]
Тестовый код:
import datetime as dt
import pandas as pd
sales = [
('account', ['A11', 'C11', 'A12', 'B12', 'A13', 'B11', 'C12', 'C13']),
('date',
[1011997, 7202005, 2011997, 12102001, 10012000, 11012001, '', '110'])
]
df = pd.DataFrame.from_items(sales)
print(df)
print(df[df.date.apply(valid_date)])
Результаты:
account date
0 A11 1011997
1 C11 7202005
2 A12 2011997
3 B12 12102001
4 A13 10012000
5 B11 11012001
6 C12
7 C13 110
account date
0 A11 1011997
1 C11 7202005
2 A12 2011997
3 B12 12102001
4 A13 10012000
5 B11 11012001