Просто используйте astype
:
import datetime as dt
df['year'] = df.index.year.astype(int)
df['month'] = df.index.month.astype(int)
df['day'] = df.index.day.astype(int)
Если есть значения Nan, используйте параметр ошибок:
df['year'] = df.index.year.astype(int, errors='ignore')
Это вернет nans для столбцов с нулевым индексом