使用 Python 将日期时间戳转换为 unix

Converting DateTime stamps into unix with Python

我似乎无法将时间戳转换为 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)

我还在学习中,所以非常感谢任何帮助!

编辑:我从未使用过Pandas,但看起来这是你应该调用的函数:

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

其中 col_number 是您的 date_stamp 列的索引(假设它被正确解析为 datetime)。

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

替换那个

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

符合

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

并添加

import time

到你的进口。请注意 some considerations apply to time zones,因此根据您的要求,您可能需要添加一些逻辑,例如转换为 UTC。

您可以通过 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

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

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

注意:但必须是datetime类型,不是string/object

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

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

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

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