J'ai les séries suivantes:
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'])
Je veux convertir les objets datetime où il y a deux dates (seule la première 2) dans le format datetime, tout en gardant les autres dans leur format d'origine.
c'est à dire - [('02-01-2020', '01-31-2021'), ('01-01-2020', '12-31-2020'), 'Period: 67 Months', 'Period: 8 Months']
J'ai essayé ce qui suit, mais je reçois un objet datetime pour ceux qui ne disposent pas d'une bonne date.
for i,v in myseries.iteritems():
matches = list(datefinder.find_dates(v))
if len(matches) > 0:
print(matches)
Je l' ai essayé d' utiliser l' staticmethod
argument datefinder de find_dates()
, qui me donne ce qui suit. Je peux travailler avec cela , cependant, je suis incapable d'extraire les objets dont j'ai besoin.
[(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')]
Ma sortie désirée est de 2 listes:
date_1 = ['1 February 2020', '1 January 2020', '67 mon', '8 Mon']
date_2 = ['31 January 2021', '31 December 2020', '67 mon', '8 Mon']
Damon:
myseries.apply(lambda x: [x[1] for x in datefinder.find_dates(x, source=True)][:2] if not pd.isna(x) else [])
Fondamentalement, utilisez le paramètre source pour obtenir la date initiale, puis, si la liste des dates est plus grand que 2, obtenir le premier 2.
Si vous voulez DATE_1 et 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])