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.
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
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'))
En Supposant que nous avons importé pandas as pd
et df
est notre dataframe
pd.to_datetime(df['date'], unit='s')
Fonctionne pour moi.