salam,
merci pour ton aide mais lorsque une ligne contient une date comme:1986-03-12 00:00:00
il me donne NaN .comment extraire les dates et spliter les lettres des dates en meme temps.
voila la liste:
voila le resultat:
Merci d'avance.
Fallait s'y attendre, il est rare, même dans le monde professionnel où une demande n'est pas élargie, modifiée voir même supprimée... Le PO ne déroge pas à la règle ! Cependant, sur une demande où les cas de figures sont peu nombreux comme l'est le formatage de date, il aurait été logique d'avoir tout ces cas dès le premier post.
C'est d'ailleurs pour cela que j'avais présenté dès ma 1ère réponse une solution prenant tous les cas, à force sur les forums tu t'habitues à prévoir ce genre de changement, en plus avec le module dateutil, ça s'y prettait plutôt bien
@didoalilo
Il est possible de le faire avec pandas, mais la solution avec expression régulière me semble bien plus complexe que ma solution de départ, je suis pas certains que se soit la meilleure solution
Imaginions que l'on prenne la version anglaise de date, on aurait encore à modifier l'expression régulière.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 import pandas as pd data = ( "12/03/86", "11/01/1978 برج الغدير", "19/12/1978 عنابة", "20/04/1971 عنابة", "12/06/1962 عنابة", "07/01/1978 قسنطينة", "12/06/1965 واد زناتي", "31/08/1989 سوق أهراس", "01/04/1988 عنابة", "02/07/1974 لخضارة", "04/01/1977 عنابة", "10/08/1987 toto", "15-05-89", "23-10-1995 عنابة", ) df = pd.DataFrame(data, columns=['input']) df['date'] = df['input'].str.extract(r'(\d{1,2}(?:\/|-)\d{1,2}(?:\/|-)(?:\d{2}|\d{4}))') df['date'] = pd.to_datetime(df['date'], dayfirst=True, errors='coerce').dt.strftime('%d/%m/%Y') print(df['date'])
------------------------------
Proposition qui je pense va mettre d'accord les deux mondes, utiliser la fonction extract_dates dans ta dataframe en utilisant apply.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 import pandas as pd from dateutil.parser import parse def extract_date(x): try: date_string = parse(x, fuzzy=True) except ValueError: return None return date_string.strftime('%d/%m/%Y') data = ( "12/03/86", "11/01/1978 برج الغدير", "19-12-1978 عنابة", "20/04/1971 عنابة", "12/06/1962 عنابة", "07/01/1978 قسنطينة", "12/06/1965 واد زناتي", "31/08/1989 سوق أهراس", "01/04/1988 عنابة", "02/07/1974 لخضارة", "04/01/1977 عنابة", "10/08/1987 toto", "96-10-25 test_anglais", "2008-11-28 autres tests anglais" ) df = pd.DataFrame(data, columns=['input']) df['date'] = df['input'].apply(extract_date) print(df)
Partager