Python - Преобразование объектов Datetime в серии, сохраняя неизменными объекты времени даты - PullRequest
2 голосов
/ 03 апреля 2020

У меня есть следующие серии:

myseries = pd.Series([' Period : From 1 February 2020 to 31 January 2021',
                         ' Period : 1 January 2020 to 31 December 2020',
                         ' Period 67 months',
                         ' Period: 8 Months'])

Я хочу преобразовать объекты даты и времени, в которых есть две даты (только первые 2), в формат даты и времени, оставив остальные в их исходном формате.

т.е. - [('02-01-2020', '01-31-2021'), ('01-01-2020', '12-31-2020'), 'Period: 67 Months', 'Period: 8 Months']

Я попробовал следующее, но я получаю объект datetime для тех, у которых нет правильной даты.

for i,v in myseries.iteritems():
    matches = list(datefinder.find_dates(v))
    if len(matches) > 0:
        print(matches)

Я попытался использовать аргумент staticmethod в find_dates() в DateFinder, что дает мне следующее. Однако я могу работать с этим, но не могу извлечь нужные мне объекты.

[(datetime.datetime(2020, 2, 1, 0, 0), '1 February 2020'), (datetime.datetime(2021, 1, 31, 0, 0), '31 January 2021')]
[(datetime.datetime(2020, 1, 1, 0, 0), '1 January 2020'), (datetime.datetime(2020, 12, 31, 0, 0), '31 December 2020')]
[(datetime.datetime(2067, 4, 4, 0, 0), '67 mon')]
[(datetime.datetime(2020, 4, 8, 0, 0), '8 Mon')]

Мой желаемый результат - 2 списка:

date_1 = ['1 February 2020', '1 January 2020', '67 mon', '8 Mon']
date_2 = ['31 January 2021', '31 December 2020', '67 mon', '8 Mon']

1 Ответ

2 голосов
/ 03 апреля 2020

IIU C:

myseries.apply(lambda x: [x[1] for x in datefinder.find_dates(x, source=True)][:2] if not pd.isna(x) else [])

В основном, используйте параметр источника, чтобы получить исходную дату, затем, если список дат больше 2, получите первые 2.

Если вы хотите, чтобы date_1 и date_2:

date_1 = []
date_2 = []

dates = myseries.apply(lambda x: [x[1] for x in datefinder.find_dates(x, source=True)][:2])
for date in dates:
    if len(date)==0:
        date_1.append(np.nan)
        date_2.append(np.nan)
    if len(date)>0:
        date_1.append(date[0])

    if len(date)>1:
        date_2.append(date[1])

    elif len(date)>0:
        date_2.append(date[0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...