tiempo online normal milisegundos fecha convertir datetime pandas

datetime - online - Fila de conversión de pandas con indicación de fecha y hora de Unix(en milisegundos) a fecha y hora



fecha unix php (3)

Puede hacer esto como un paso posterior al procesamiento usando to_datetime y pasando arg unit=''ms'' :

In [5]: df[''UNIXTIME''] = pd.to_datetime(df[''UNIXTIME''], unit=''ms'') df Out[5]: RUN UNIXTIME VALUE 0 1 2015-11-10 13:05:02.320 10 1 2 2015-11-10 13:05:02.364 20 2 3 2015-11-10 13:05:22.364 42

Necesito procesar una gran cantidad de archivos CSV donde la marca de tiempo es siempre una cadena que representa la marca de tiempo de Unix en milisegundos. No he podido encontrar un método para modificar estas columnas de manera eficiente.

Esto es lo que se me ocurrió, sin embargo esto, por supuesto, solo duplica la columna y de alguna manera debo volver a ponerla en el conjunto de datos original. Estoy seguro de que se puede hacer al crear el DataFrame ?

import sys if sys.version_info[0] < 3: from StringIO import StringIO else: from io import StringIO import pandas as pd data = ''RUN,UNIXTIME,VALUE/n1,1447160702320,10/n2,1447160702364,20/n3,1447160722364,42'' df = pd.read_csv(StringIO(data)) convert = lambda x: datetime.datetime.fromtimestamp(x / 1e3) converted_df = df[''UNIXTIME''].apply(convert)

Esto seleccionará la columna ''UNIXTIME'' y la cambiará de

0 1447160702320 1 1447160702364 2 1447160722364 Name: UNIXTIME, dtype: int64

dentro de esto

0 2015-11-10 14:05:02.320 1 2015-11-10 14:05:02.364 2 2015-11-10 14:05:22.364 Name: UNIXTIME, dtype: datetime64[ns]

Sin embargo, me gustaría usar algo como pd.apply() para obtener todo el conjunto de datos devuelto con la columna convertida o, como ya escribí, simplemente cree los tiempos de fecha cuando se genera el DataFrame desde CSV.


Se me ocurrió una solución, supongo:

convert = lambda x: datetime.datetime.fromtimestamp(float(x) / 1e3) df = pd.read_csv(StringIO(data), parse_dates=[''UNIXTIME''], date_parser=convert)

Todavía no estoy seguro de si este es el mejor.


Uso la solución @EdChum, pero agrego la gestión de la zona horaria:

df[''UNIXTIME'']=pd.DatetimeIndex(pd.to_datetime(pd[''UNIXTIME''], unit=''ms''))/ .tz_localize(''UTC'' )/ .tz_convert(''America/New_York'')

el tz_localize indica que la marca de tiempo se debe considerar con respecto a "UTC", luego el tz_convert mueve realmente la fecha / hora a la zona horaria correcta (en este caso, "América / Nuevo_York").

Tenga en cuenta que se ha convertido a DatetimeIndex porque los métodos tz_ solo funcionan en el índice de la serie. Desde Pandas 0.15 uno puede usar .dt :

df[''UNIXTIME'']=pd.to_datetime(pd[''UNIXTIME''], unit=''ms'')/ .dt.tz_localize(''UTC'' )/ .dt.tz_convert(''America/New_York'')