Как создать индекс даты и времени из строки в Python? - PullRequest
1 голос
/ 05 июня 2019

Существует три файла с именами: file_2018-01-01_01_temp.tif, file_2018-01-01_02_temp.tif и file_2018-01-01_03_temp.tif.Я хочу перечислить их имена как ['2018010101', '2018010102', '2018010103'] в Python.Приведенный ниже код создает неправильный список.

import pandas as pd
from glob import glob
from os import path

pattern = '*.tif'
filenames = [path.basename(x) for x in glob(pattern)]
pd.DatetimeIndex([pd.Timestamp(f[5:9]) for f in filenames])

Результат: DatetimeIndex(['2018-01-01', '2018-01-01', '2018-01-01']

1 Ответ

2 голосов
/ 05 июня 2019

Я думаю, что самым простым является индексирование с заменой в понимании списка:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...