Convertir l'heure unix en date lisible dans pandas DataFrame

J'ai un cadre de données avec des temps et des prix unix. Je veux convertir la colonne d'index afin qu'elle s'affiche dans les dates lisibles par l'homme. Donc, par exemple, j'ai" date " comme 1349633705 dans la colonne d'index mais je voudrais qu'il montre comme 10/07/2012 (ou au moins 10/07/2012 18: 15). Pour un certain contexte, voici le code avec lequel je travaille et ce que j'ai déjà essayé:

import json
import urllib2
from datetime import datetime
response = urllib2.urlopen('http://blockchain.info/charts/market-price?&format=json')
data = json.load(response)   
df = DataFrame(data['values'])
df.columns = ["date","price"]
#convert dates 
df.date = df.date.apply(lambda d: datetime.strptime(d, "%Y-%m-%d"))
df.index = df.date   
df

Comme vous pouvez le voir, j'utilise df.date = df.date.apply(lambda d: datetime.strptime(d, "%Y-%m-%d")) ici qui ne fonctionne pas puisque je travaille avec des entiers, pas des chaînes. Je pense que j'ai besoin d'utiliser datetime.date.fromtimestamp mais je ne suis pas tout à fait sûr de savoir comment appliquer cela à l'ensemble de df.date. Grâce.

58
demandé sur W A Carnegie 2013-10-07 22:21:02

3 réponses

Ceux-ci semblent être des secondes depuis l'époque.

In [20]: df = DataFrame(data['values'])

In [21]: df.columns = ["date","price"]

In [22]: df
Out[22]: 
<class 'pandas.core.frame.DataFrame'>
Int64Index: 358 entries, 0 to 357
Data columns (total 2 columns):
date     358  non-null values
price    358  non-null values
dtypes: float64(1), int64(1)

In [23]: df.head()
Out[23]: 
         date  price
0  1349720105  12.08
1  1349806505  12.35
2  1349892905  12.15
3  1349979305  12.19
4  1350065705  12.15
In [25]: df['date'] = pd.to_datetime(df['date'],unit='s')

In [26]: df.head()
Out[26]: 
                 date  price
0 2012-10-08 18:15:05  12.08
1 2012-10-09 18:15:05  12.35
2 2012-10-10 18:15:05  12.15
3 2012-10-11 18:15:05  12.19
4 2012-10-12 18:15:05  12.15

In [27]: df.dtypes
Out[27]: 
date     datetime64[ns]
price           float64
dtype: object
129
répondu Jeff 2013-10-07 18:25:59

Si vous essayez d'utiliser:

df[DATE_FIELD]=(pd.to_datetime(df[DATE_FIELD],***unit='s'***))

Et recevoir une erreur:

"pandas.tslib.OutOfBoundsDatetime: impossible de convertir l'entrée avec l'unité " s ""

Cela signifie que le DATE_FIELD n'est pas spécifié en secondes.

Dans mon cas, c'était milli secondes - EPOCH time.

La conversion a fonctionné en utilisant ci-dessous:

df[DATE_FIELD]=(pd.to_datetime(df[DATE_FIELD],unit='ms')) 
15
répondu parachute py 2017-07-07 20:18:23

En Supposant que nous avons importé pandas as pd et df est notre dataframe

pd.to_datetime(df['date'], unit='s')

Fonctionne pour moi.

2
répondu fahim reza 2018-09-17 09:01:43