sauter les lignes avec des dates incorrectes lors de l'utilisation de pd.read_csv


LateCoder

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_csvsauter uniquement les lignes avec des dates incorrectes tout en analysant toutes les autres lignes du csv?

miraculixx

quelque part dans le csv qui est envoyé, il y a une date mal formatée

np.datetime64a besoin de chaînes formatées ISO8601 pour fonctionner correctement. La bonne nouvelle est que vous pouvez intégrer np.datetime64votre 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 dateutilfonctionne mieux que np.datetime64et 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,
)

Articles connexes


Sauter des lignes lors de l'itération sur un vecteur

Rivasa J'ai donc fait un vector<string>des lignes que j'ai lues à partir d'un fichier texte. Le fait est que ces lignes constituent de petits ensembles de données. Ce que je veux faire, c'est essentiellement itérer sur ces blocs de données. (Ce qui peut être s

R: Dates incorrectes après l'utilisation de read.csv

Yallweh Cela m'a perplexe. J'ai essayé plusieurs solutions que j'ai trouvées ailleurs sur SO et d'autres endroits en vain. Le plus proche de mon problème semble être cette question: Convertir le facteur en objet de date R sans NA J'essaye de lire dans un .csv