10
votes

Comment changer DTYPE d'une colonne de DataFrame?

Je veux changer Dtype d'une colonne de cadre de données (de DateTime64 à l'objet).

Tout d'abord, je crée un cadre de données: P>

>>> df['dates'] = df['dates'].astype(object)
>>> df.dtypes
dates     datetime64[ns]
values             int64
dtype: object


4 commentaires

Pourquoi essayez-vous de faire cela? La représentation d'objets dans le cas d'une date d'heure est très inefficace, les pandas se convergent en interne.


Je souhaite convertir DateTime à l'objet car les pandas ont un bogue (voir Stackoverflow.com/questions/19300730 ) dans les totaux de pivot Calculez si colonne (qui utilisait comme en-tête) type est DateTime.


La solution dans ce numéro a l'air bien, simplement transposer les lignes / colonnes. Ce que vous essayez de faire n'a rien à voir avec datetime64 [ns] en tant que dtype et ne vous aidera pas.


Oui, mais seulement si la colonne Pivot Row n'est pas aussi de la Datatime.


4 Réponses :


0
votes

Est-ce ce que vous êtes après? XXX


0 commentaires

8
votes

Si vous souhaitez vraiment passer du type de données de DateTime64 [NS] à votre objet, vous pouvez exécuter quelque chose comme ceci:

df['dates'] = df['dates'].apply(lambda x: str(x))
print df.types # Can verify to see that dates prints out as an object


2 commentaires

Vous n'avez pas besoin d'une lambda dans votre exemple, réellement: df ['dates'] = df ['dates']. Appliquer (STR) fonctionnerait et lu la même chose.


C'est la bonne réponse. J'ai rencontré le même problème lors de la conversion d'une colonne d'INT64 en objet à l'aide de .astype ('objet'). Impression des détails de la colonne à l'aide de .info () Affiche cette colonne a été convertie mais l'encodage a échoué dire que cette colonne n'est pas "str"



0
votes

pas compétent avec l'utilisation de Lambda. Dans un cas simple, df ['dates']. Astype (str) fonctionnerait également.

Note: Cela ne fonctionne pas quand il y a une nan dans une colonne.

Pas de solution à OP, mais d'autres peuvent trouver de l'aide dans Cette question . Presque dupliquer, mais il convient principalement de convertir en numérique.


0 commentaires

1
votes

Si vous souhaitez convertir la date Colonne Objet Type à DateTime64 [NS] DTYPE; , le code suivant fonctionnera: < Pré> xxx


0 commentaires