Не самый элегантный, но вы можете попробовать починить и заказать детали года и месяца.Приведенный ниже код работает:
Восстановите ваши данные:
df = pd.DataFrame({"date_str": ['Mar-97', 'Apr-97', 'May-97',
'Jun-97', 'Nov-00', 'Dec-00',
'1-Jan', '1-Feb', '1-Mar', '1-Apr']})
Разделите части:
df = pd.concat([df, df['date_str'].str.split("-", expand=True)], axis=1)
Организуйте месяц и год:
df.loc[df[0].str.len() == 3, 'month'] = df.loc[df[0].str.len() == 3, 0]
df.loc[df[1].str.len() == 3, 'month'] = df.loc[df[1].str.len() == 3, 1]
df.loc[df[0].str.len() != 3, 'year'] = df.loc[df[0].str.len() != 3, 0]
df.loc[df[1].str.len() != 3, 'year'] = df.loc[df[1].str.len() != 3, 1]
Правильные годы, состоящие только из одной цифры:
df.loc[df['year'].str.len() == 1, 'year'] = '0' + df.loc[df['year'].str.len() == 1, 'year']
Создание правильного столбца даты:
df['date'] = (df['month'] + '-' + df['year']).apply(lambda x: pd.to_datetime(x, format="%b-%y"))
Вывод:
print (df ['date')])
0 1997-03-01
1 1997-04-01
2 1997-05-01
3 1997-06-01
4 2000-11-01
5 2000-12-01
6 2001-01-01
7 2001-02-01
8 2001-03-01
9 2001-04-01
Name: date, dtype: datetime64[ns]