我似乎无法在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)
我还在学习,所以任何帮助都会非常感激!
答案 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_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
到你的进口。请注意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