Parece que no puedo obtener una marca de tiempo en un formato de marca de tiempo Unix y supongo que me faltan algunos puntos. Buscando ayuda

Tengo una columna dentro de un df que es un objeto de fecha y hora en el formato: AAAA-MM-DD HH: MM: SS y necesito una nueva columna con el sello Unix.

Estoy trayendo el csv a Python con:

gps = filepath here   
dateparse= lambda x: pd.datetime.strptime(x, '%Y%m%d %H:%M:%S')
gps_dat = pd.read_csv(gps, parse_dates=['date_stamp'],date_parser=dateparse)

Cada vez que trato de cambiar esta columna en un sello Unix, recibo un error sobre el formato incorrecto o "datetime.datetime" no tiene el atributo "datetime" con esto:

gps_dat['unix']=datetime.datetime(gps_dat['date_stamp'])

Debería estar usando

calendar.timegm(tuple)

Todavía estoy aprendiendo, por lo que cualquier ayuda sería muy apreciada.

2
Yolo_chicken 9 may. 2016 a las 16:36

3 respuestas

La mejor respuesta

ACTUALIZACIÓN: si desea convertir la columna de fecha y hora a marca de tiempo UNIX:

gps_dat['unix']=gps_dat['date_stamp'].astype(np.int64) // 10**9

NOTA: pero debe ser del tipo datetime, no cadena / objeto

Respuesta anterior: analizando desde marca de tiempo UNIX a fecha y hora

Intenta cambiar tu función de analizador de esta manera:

dateparse= lambda x: pd.to_datetime(x, unit='s')

Esto le indicará a to_datetime () que está utilizando Formato de marca de tiempo UNIX

1
MaxU 9 may. 2016 a las 16:29

Editar : nunca he usado Pandas, pero parece que este es el tipo de función que debería llamar:

gps_dat['unix'] = gps_dat.apply(lambda row: time.mktime(row['date_stamp'].timetuple()), axis=col_number)

Donde col_number es el índice de su columna date_stamp (suponiendo que se analizó correctamente como datetime).

Respuesta original (cuando no sabía que Pandas estaba involucrado):

Reemplace eso

gps_dat['unix']=datetime.datetime(gps_dat['date_stamp'])

Linea con

gps_dat['unix'] = time.mktime(gps_dat['date_stamp'].timetuple())

Y añadir

import time

A sus importaciones Tenga en cuenta que se aplican algunas consideraciones a las zonas horarias, por lo que de acuerdo con sus requisitos, es posible que desee agregar algo de lógica para, por ejemplo, convertir a UTC.

0
Community 23 may. 2017 a las 12:23

Puede usar una solución más rápida con list comprensión:

print gps_dat
  nam  code date1          date_stamp
0   a     1   1/1 2012-10-08 18:15:05
1   b     3   3/4 2012-10-08 18:15:05

gps_dat['unix'] = [t.value // 10 ** 9 for t in gps_dat['date_stamp']]
print gps_dat
  nam  code date1          date_stamp        unix
0   a     1   1/1 2012-10-08 18:15:05  1349720105
1   b     3   3/4 2012-10-08 18:15:05  1349720105

Tiempos :

In [46]: %timeit gps_dat['date_stamp'].astype(np.int64) // 10**9
1000 loops, best of 3: 204 µs per loop

In [47]: %timeit [t.value // 10 ** 9 for t in gps_dat['date_stamp']]
The slowest run took 4.99 times longer than the fastest. This could mean that an intermediate result is being cached 
10000 loops, best of 3: 24.2 µs per loop
1
jezrael 9 may. 2016 a las 16:52