Я думаю, что самым простым является индексирование с заменой в понимании списка:
a = [f[5:18].replace('_','').replace('-','') for f in filenames]
print (a)
['2018010101', '2018010102', '2018010103']
Аналогично Series.str.replace
:
a = pd.Index([f[5:18] for f in filenames]).str.replace('\-|_', '')
print (a)
Index(['2018010101', '2018010102', '2018010103'], dtype='object')
Или преобразовать значения в DatetimeIndex
и затем используйте DatetimeIndex.strftime
:
a = pd.to_datetime([f[5:18] for f in filenames], format='%Y-%m-%d_%H').strftime('%Y%m%d%H')
print (a)
Index(['2018010101', '2018010102', '2018010103'], dtype='object')
РЕДАКТИРОВАТЬ:
dtype находится в объекте, но он должен быть в dtype = 'datetime64 [нс]
Если нужно указать время и дату, форматирование должно быть по умолчанию, его нельзя изменить:
d = pd.to_datetime([f[5:18] for f in filenames], format='%Y-%m-%d_%H')
print (d)
DatetimeIndex(['2018-01-01 01:00:00', '2018-01-01 02:00:00',
'2018-01-01 03:00:00'],
dtype='datetime64[ns]', freq=None)