python - Convertir tiempo de Unix a fecha legible en pandas DataFrame
date unix (3)
Estos parecen ser segundos desde la época.
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
Tengo un marco de datos con tiempos Unix y precios en él. Quiero convertir la columna de índice para que se muestre en fechas legibles por humanos. Así que, por ejemplo, tengo "fecha" como 1349633705 en la columna de índice, pero me gustaría que se muestre como 10/07/2012 (o al menos 10/07/2012 18:15). Para cierto contexto, aquí está el código con el que estoy trabajando y lo que ya he intentado:
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
Como pueden ver, estoy usando df.date = df.date.apply(lambda d: datetime.strptime(d, "%Y-%m-%d"))
que no funciona porque estoy trabajando con enteros, no con cadenas. Creo que necesito usar datetime.date.fromtimestamp
pero no estoy muy seguro de cómo aplicar esto a la totalidad de df.date. Gracias.
Si intentas usar:
df[DATE_FIELD]=(pd.to_datetime(df[DATE_FIELD],***unit=''s''***))
y recibe un error:
"pandas.tslib.OutOfBoundsDatetime: no se puede convertir la entrada con la unidad ''"
Esto significa que DATE_FIELD
no se especifica en segundos.
En mi caso, fue milli segundos - EPOCH time
.
La conversión funcionó usando a continuación:
df[DATE_FIELD]=(pd.to_datetime(df[DATE_FIELD],unit=''ms''))
Suponiendo que importamos pandas como pd y df es nuestro marco de datos
pd.to_datetime(df[''date''],unit=''s'')
este código funcionó para mí