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://
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://
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.