J'ai des problèmes pour obtenir la chaîne suivante convertie en un objet DateTime à l'aide de Python. J'ai un gros fichier CSV (plus de 10k lignes) et j'ai besoin de transformer une colonne de dates du format suivant: à: p> Ma première pensée était d'utiliser DateTime.stryptime, ce qui nécessite de passer dans la chaîne et du format de date à laquelle il se trouve, car je peux simplement reformater un type de date à un autre réel facile. Le problème que je vais avoir est que je ne sais pas comment représenter cette chaîne sous forme de format de date, principalement en raison du fuseau horaire. P> Mes meilleures devinons pour le format de date dont j'ai besoin est '% mmm% dd ,% yyyy% h:% m:% S% AA 'Mais je ne peux pas comprendre comment représenter le fuseau horaire ici (et je ne suis pas sûr que je ne suis pas sûr de AM / PM étant% AA). P> J'ai essayé de regarder d'autres discussions, mais ils semblent tous avoir facilement des cordes pouvant correspondre. P> merci! P> p>
3 Réponses :
Le format est documenté dans le tableau suivant, en particulier, AM / PM est https: //docs.python .Org / 3 / Bibliothèque / DateTime.html # Codes de format StrfTime-and-STRPTIME P>
Cependant, dans votre cas, je suggérerais de ne pas vous embêter avec la analyse du tout, mais comptez sur % p code> et timezone est
% z code>: p>
DateUtil code>
pour faire l'analyse. Il est plus flexible car il peut comprendre le bon format presque toujours. P>
Je vais bien couper l'heure et le fuseau horaire complètement p>
Alors vous avez beaucoup de choix. Comme déjà mentionné, DateUtil est cool et travaillerait bien. Mais si vous vouliez rester dans DateTime pour une raison quelconque, vous pouvez: p>
- Analysez le tout, mais sachez que le fuseau horaire est ignoré li> ul>
DateTime / STRPTIME peut analyser le tout, mais ne comprend pas / convertir / convertir des fuseaux horaires. Si vous faites cela, il suffira de l'analyser comme UTC. P>
>>> ts = "Jun 1, 2020 12:11:49 AM PDT" >>> str(datetime.strptime(ts.rpartition(" ")[0], "%b %d, %Y %I:%M:%S %p")) '2020-06-01 00:11:49'
Je viens d'essayer d'utiliser DateUtil, mais j'ai eu l'avertissement suivant: InnownnyZonewarning: Tzname PDT identifié mais non compris. Pass tzinfos code> argument afin de renvoyer correctement une DateTime ajout de fuseau horaire. Dans une version future, cela constituera une exception. Je l'ai fait "d'Aptutil.Parser Import *" puis de l'analyser, je viens de "Jour = Analys (String)"
En outre, j'ai essayé d'utiliser Strptime comme vous l'avez dit, mais j'ai eu une erreur: VangerError: Données de l'heure 'Juin 1, 2020 12:00:26 AM PDT' ne correspond pas au format '% B% D,% Y% I:% M:% S% p% z '
Oui, je n'ai pas réalisé que cela ne fonctionne que avec certaines cordes (même si cela ne convient pas réellement sur le fuseau horaire).
En tant que @AndrTAM déjà suggéré, vous pouvez utiliser un analyseur maintenant, vous pouvez facilement formater à la chaîne: p> DateUtil code> pour analyser facilement une telle chaîne. Pour analyser correctement le fuseau horaire, vous pouvez le fournir avec un mappage
dict code>:
Comme vous ne mentionnez que l'analyse de la partie de date, vous souciez-vous de l'heure ou du Timzone? Ne pouviez-vous pas tout simplement ignorer tout après l'année ou aurez-vous besoin de la partie de temps plus tard?
Ouais, je vais bien couper l'heure et le fuseau horaire complètement, je viens de supposer que je devais convertir le tout avant de le faire. Existe-t-il un moyen de tout ignorer après l'année de la conversion sur l'objet DateTime?