sauter les lignes avec des dates incorrectes lors de l'utilisation de pd.read_csv
Je lis des fichiers csv à partir d'une source de données externe en utilisant pd.read_csv
, comme dans le code ci-dessous:
pd.read_csv(
BytesIO(raw_data),
parse_dates=['dates'],
date_parser=np.datetime64,
)
Cependant, quelque part dans le csv qui est envoyé, il y a une date mal formatée, ce qui entraîne l'erreur suivante:
ValueError: Error parsing datetime string "2015-08-2" at position 8
Cela provoque le blocage de l'ensemble de l'application. Bien sûr, je peux gérer ce cas avec un essai / sauf, mais alors je perdrai toutes les autres données dans ce csv particulier. J'ai besoin de pandas pour conserver et analyser ces autres données.
Je n'ai aucun moyen de prédire quand / où ces données (qui changent quotidiennement) auront des dates mal formatées. Existe-t-il un moyen de pd.read_csv
sauter uniquement les lignes avec des dates incorrectes tout en analysant toutes les autres lignes du csv?
quelque part dans le csv qui est envoyé, il y a une date mal formatée
np.datetime64
a besoin de chaînes formatées ISO8601 pour fonctionner correctement. La bonne nouvelle est que vous pouvez intégrer np.datetime64
votre propre fonction et l'utiliser comme date_parser
:
def parse_date(v):
try:
return np.datetime64(v)
except:
# apply whatever remedies you deem appropriate
pass
return v
pd.read_csv(
...
date_parser=parse_date
)
J'ai besoin de pandas pour conserver et analyser ces autres données.
Je trouve souvent qu'un analyseur de date plus flexible comme dateutil
fonctionne mieux que np.datetime64
et peut même fonctionner sans la fonction supplémentaire:
import dateutil
pd.read_csv(
BytesIO(raw_data),
parse_dates=['dates'],
date_parser=dateutil.parser.parse,
)