使用Python将DateTime标记转换为unix

时间:2016-05-09 13:36:24

标签: python pandas timestamp unix-timestamp

我似乎无法在unix时间戳格式中获得时间戳,并假设我错过了一些点。寻求一些帮助。

我在df中有一个列,它是一个日期时间对象,格式如下: YYYY-MM-DD HH:MM:SS和我需要一个带有unix标记的新列。

我将csv带入python:

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)

任何时候我尝试将此列更改为unix标记我收到错误格式错误或“datetime.datetime”没有属性“datetime”:

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

我应该使用

calendar.timegm(tuple)

我还在学习,所以任何帮助都会非常感激!

3 个答案:

答案 0 :(得分:1)

更新:如果您想将日期时间列转换为 UNIX时间戳:

ready

注意:但它必须是gps_dat['unix']=gps_dat['date_stamp'].astype(np.int64) // 10**9 类型,不是字符串/对象

旧答案:解析 UNIX时间戳到日期时间

尝试像这样更改解析器函数:

datetime

这将指示to_datetime()您正在使用UNIX时间戳格式

答案 1 :(得分:0)

编辑:我从未使用过Pandas,但看起来这就是你应该调用的那种功能:

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

其中col_numberdate_stamp列的索引(假设它已被正确解析为datetime)。

原始回答(当我不知道Pandas参与时):

替换

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

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

并添加

import time

到你的进口。请注意NLog.Web,因此根据您的要求,您可能需要添加一些逻辑,比如转换为UTC。

答案 2 :(得分:0)

您可以使用list理解更快的解决方案:

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

<强>计时

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