Mon dataframe a une DOB
colonne (exemple de format 1/1/2016
) qui par défaut est convertie en pandas dtype 'object':DOB object
La conversion de ce format de date avec df['DOB'] = pd.to_datetime(df['DOB'])
, la date est convertie en: 2016-01-26
et son dtype
est: DOB datetime64[ns]
.
Maintenant, je veux convertir ce format de date vers 01/26/2016
ou dans tout autre format de date général. Comment fait-on ça?
Quelle que soit la méthode que j'essaie, elle affiche toujours la date au 2016-01-26
format.
Réponses:
Vous pouvez utiliser
dt.strftime
si vous avez besoin de convertirdatetime
vers d'autres formats (mais notez que ladtype
colonne seraobject
(string
)):la source
.merge
colonne datetime d'une autre dataframe? Est-il judicieux de convertir l'autre colonne datetime en colonne d'objet pour faire le.merge
?.merge
peut toujours être fait correctement si les deux colonnes sont des colonnes datetimes même si elles n'ont pas exactement le même format. Est-ce correct?Changer le format mais pas changer le type:
la source
date
colonne soit « 26 novembre 2019».strftime()
signifie "chaîne de temps" , ainsidf["date"].dt.strftime('%Y-%m')
sera une chaîne"2019-11"
pour cet élément. Ensuite,pd.to_datetime()
convertira cette chaîne de retour audatetime64
format, mais maintenant « Novembre 1 , 2019 »! Le résultat sera donc: Aucun changement de format, mais le changement de la valeur de la date elle-même!Le code ci-dessous a fonctionné pour moi au lieu du précédent - essayez-le!
la source
format='%m/%d/%Y'
paramètre est pour analyser une chaîne, c'est-à-dire que vous êtes censé fournir la chaîne dans un tel format (par exemple"5/13/2019"
). Rien de plus, pas de changement de format. Il sera toujours affiché comme2019-05-13
- ou il déclenchera une exception, s'ildf['DOB'].astype(str)
contient des éléments qui ne sont pas dans un tel format, par exemple dans un format"2019-05-13"
.Par rapport à la première réponse, je recommanderai d'utiliser d'abord dt.strftime (), puis pd.to_datetime (). De cette manière, il en résultera toujours le type de données datetime.
Par exemple,
la source
Il y a une différence entre
La question est donc: comment parvenir à la présentation appropriée de mes données sans changer les données / types de données eux-mêmes?
Voici la réponse:
id
et desclass
attributs pour un style CSS ultérieur - vous pouvez ou vous ne pouvez pas les utiliser),utilisez le style .Le style ne change pas les données / types de données des colonnes de votre dataframe.
Maintenant, je vous montre comment y accéder dans le notebook Jupyter - pour une présentation sous forme de fichier HTML, voir la note à la fin de la question.
Je suppose que votre colonne a
DOB
déjà le typedatetime64
(vous avez montré que vous savez comment y accéder). J'ai préparé un dataframe simple (avec une seule colonne) pour vous montrer un style de base:Pas de style:
Le styliser comme
mm/dd/yyyy
:Le styliser comme
dd-mm-yyyy
:Faites attention!
L'objet renvoyé n'est PAS un dataframe - c'est un objet de la classe
Styler
, alors ne le réattribuez pas àdf
:Ne faites pas ça:
(Chaque dataframe a son objet Styler accessible par sa
.style
propriété, et nous avons changé cetdf.style
objet, pas le dataframe lui-même.)Questions et réponses:
Q: Pourquoi votre objet Styler (ou une expression le renvoyant) utilisé comme dernière commande dans une cellule de bloc-notes Jupyter affiche votre tableau (stylisé) et non l'objet Styler lui-même?
R: Parce que chaque objet Styler a une méthode de rappel
._repr_html_()
qui renvoie un code HTML pour le rendu de votre dataframe (sous la forme d'un joli tableau HTML).Jupyter Notebook IDE appelle cette méthode automatiquement pour rendre les objets qui en ont.
Remarque:
Vous n'avez pas besoin du notebook Jupyter pour le style (c'est-à-dire pour une sortie agréable d'une trame de données sans changer ses données / types de données ).
Un objet Styler a également une méthode
render()
, si vous souhaitez obtenir une chaîne avec le code HTML (par exemple pour publier votre dataframe formaté sur le Web, ou simplement présenter votre tableau au format HTML):la source
if
instruction conditionnelle si connue de tous les programmeurs? - Malgré cela merci pour votre commentaire, cela peut être utile pour certaines personnes.pd.to_datetime()
a les argumentserrors='raise'/'coerce'/'ignore', dayfirst, yearfirst, utc, exact
pour contrôler la précision et la satisfaction des exceptions, et si les sorties invalides sont forcéesNaT
ou quoi. Ce qui le rend plus compliqué dans les ensembles de données «du monde réel», ce sont les formats mixtes / manquants / incomplets, les heures, les fuseaux horaires, etc. les exceptions ne sont pas nécessairement de mauvaises choses.Le code ci-dessous passe au type 'datetime' et se met également en forme dans la chaîne de format donnée. Fonctionne bien!
la source
df['DOB']=pd.to_datetime(df['DOB']).dt.strftime('%m/%d/%Y')
Vous pouvez essayer ceci, cela convertira le format de date en JJ-MM-AAAA:
la source
dayfirst=True
est uniquement la spécification d'un ordre d'analyse de date, par exemple cette chaîne de date ambivalente en tant que "2-1-2019" sera analysée en tant que 2 janvier 2019, et non en tant que 1er février 2019. Rien de plus, pas de changement pour le formatage de sortie .