Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Licence CC BY-NC-ND Thierry Parmentelat & Arnaud Legout Inria - UCA

Complément - niveau intermédiaire

Parsing des dates et gestion des erreurs

Lorsqu’il y a des erreurs de parsing des dates, pandas offre la possibilité de lancer une exception, ou de produire un objet NaT pour Not a Time qui se manipule ensuite comme un NaN.

import pandas as pd
date = '100/06/2018' # cette date ne peut pas être parsée

try:
    pd.to_datetime(date) # comportement pas défaut qui lance une exception
except ValueError as e:
    print(e)
Unknown datetime string format, unable to parse: 100/06/2018
# retourne l'input en cas d'erreur
pd.to_datetime(date, errors='ignore')
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
Cell In[2], line 2
      1 # retourne l'input en cas d'erreur
----> 2 pd.to_datetime(date, errors='ignore')

File /__w/course/course/venv/lib/python3.12/site-packages/pandas/core/tools/datetimes.py:1074, in to_datetime(arg, errors, dayfirst, yearfirst, utc, format, exact, unit, origin, cache)
   1072         result = convert_listlike(argc, format)
   1073 else:
-> 1074     result = convert_listlike(np.array([arg]), format)[0]
   1075     if isinstance(arg, bool) and isinstance(result, np.bool_):
   1076         result = bool(result)  # TODO: avoid this kludge.

File /__w/course/course/venv/lib/python3.12/site-packages/pandas/core/tools/datetimes.py:437, in _convert_listlike_datetimes(arg, format, name, utc, unit, errors, dayfirst, yearfirst, exact)
    434 if format is not None and format != "mixed":
    435     return _array_strptime_with_fallback(arg, name, utc, format, exact, errors)
--> 437 result, tz_parsed = objects_to_datetime64(
    438     arg,
    439     dayfirst=dayfirst,
    440     yearfirst=yearfirst,
    441     utc=utc,
    442     errors=errors,
    443     allow_object=True,
    444 )
    446 if tz_parsed is not None:
    447     # We can take a shortcut since the datetime64 numpy array
    448     # is in UTC
    449     out_unit = np.datetime_data(result.dtype)[0]

File /__w/course/course/venv/lib/python3.12/site-packages/pandas/core/arrays/datetimes.py:2618, in objects_to_datetime64(data, dayfirst, yearfirst, utc, errors, allow_object, out_unit)
   2578 def objects_to_datetime64(
   2579     data: np.ndarray,
   2580     dayfirst,
   (...)   2585     out_unit: str | None = None,
   2586 ) -> tuple[np.ndarray, tzinfo | None]:
   2587     """
   2588     Convert data to array of timestamps.
   2589 
   (...)   2616     TypeError  : When a type cannot be converted to datetime
   2617     """
-> 2618     assert errors in ["raise", "coerce"]
   2620     # if str-dtype, convert
   2621     data = np.asarray(data, dtype=np.object_)

AssertionError: 
# retourne NaT en cas d'erreur
pd.to_datetime(date, errors='coerce')
# la dernière date n'est pas valide
d = pd.to_datetime(['jun 2018', '10/12/1980',
                    '25 january 2000', '100 june 1900'], 
                   errors='coerce')
print(d)
# on peut utiliser les méthodes pour les NaN directement sur un NaT
d.fillna(pd.to_datetime('10 june 1980'))

Pour aller plus loin

Vous trouverez de nombreux exemples dans la documentation officielle de pandas

Conclusion

Ce notebook clôt notre survol de numpy et pandas. C’est un sujet vaste que nous avons déjà largement dégrossi. Pour aller plus loin vous avez évidemment la documentation officielle de numpy et pandas :

Mais vous avez aussi l’excellent livre de Jake VanderPlas “Python Data Science Handbook” qui est entièrement disponible sous forme de notebooks en ligne :

https://github.com/jakevdp/PythonDataScienceHandbook

Il s’agit d’un très beau travail (c’est rare) utilisant les dernières versions de Python, pandas and numpy (c’est encore plus rare), fait par un physicien qui fait de la data science et qui a contribué au développement de nombreux modules de data science en Python.

Je vous conseille par ailleurs, pour ceux qui sont à l’aise en anglais, une série de 10 vidéos sur YouTube publiées par le même Jake VanderPlas, où il étudie un jeu de données du début (chargement des données) à la fin (classification).

Pour finir, si vous voulez faire de la data science, il y a un livre incontournable : “An Introduction de Statistical Learning” de G. James, D. Witten, T. Hastie, R. Tibshirani. Ce livre utilise R, mais vous pouvez facilement l’appliquer en utilisant pandas.

Les auteurs mettent à disposition gratuitement le PDF du livre ici :

http://www-bcf.usc.edu/~gareth/ISL/

N’oubliez pas, si ces ressources vous sont utiles, d’acheter ces livres pour supporter ces auteurs. Les ressources de grande qualité sont rares, elles demandent un travail énorme à produire, elles doivent être encouragées et recompensées.