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
Code:
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']) |
Imaginions que l'on prenne la version anglaise de date, on aurait encore à modifier l'expression régulière.
------------------------------
Proposition qui je pense va mettre d'accord les deux mondes, utiliser la fonction
extract_dates dans ta dataframe en utilisant
apply.
Code:
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) |