最近在处理一份驾驶行为方面的数据,其中要用到时间戳,因此就在此与大家一同分享学习一下。
1.什么是时间戳?
时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。通俗的讲, 时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。 它的提出主要是为用户提供一份电子证据, 以证明用户的某些数据的产生时间。 在实际应用上, 它可以使用在包括电子商务、 金融活动的各个方面, 尤其可以用来支撑公开密钥基础设施的 “不可否认” 服务。
2.普通日期与时间戳之间的转换
2.1利用EXCEL
所要用到的公式如下:
A1=(B1-70*365-19)*86400-8*3600
其中B1表示正常日期时间格式,A1就是所需的时间戳格式,A1单元格属性日期格式转成常规格式就可以了。
实际操作如下:
如图所示:时间所在列为第K列
现在我们新增一列第N列命名为unix ,并在其第二行键入公式:
点击√,出现如下结果:
现在我们验证我们的结果对不对,在网上在线转换工具https://tool.lu/timestamp/进行测试,如下:
验证发现我们用Excel公式计算出来的结果是正确的。我们将后面的都转换,点击小黑色+号,往下拉,则整列都可以转换成日期戳格式,如下图:
当然Excel需要拖动的体验太不好了,于是尝试用python看能不能处理。
2.2利用python
用python进行日期格式与时间戳的转换需要用到pandas和time两个包,具体代码如下:
import pandas as pd
import time
data = pd.read_csv('C:\\Users\\L-Consen\\Downloads\\附件1-示例数据-100辆车\\AD00113.csv',header=0)#从某个存储位置读取文件
for i in range(0,len(data)):
row= data.iloc[i]['location_time']
timeArray = time.strptime(row, "%Y-%m-%d %H:%M:%S")#将其转换为时间数组
timeStamp = int(time.mktime(timeArray))#转换为时间戳
print(timeStamp)
用到的时间数据和上面Excel的时间数据一样,下图是输出的结果
可以看出,与Excel的结果是一样的。证明这个处理是正确的。
3.总结
其实中途我还用了R语言来进行转换,R代码如下:
# 数据读取
inputfile <- read.csv('./data1/AD00113.csv', header = TRUE)
# 转换成时间戳
loss <- as.numeric(as.POSIXct("(inputfile[,11])", format="%Y-%m-%d %H:/%M:/%S"))
# 数据第一列为日期
# 保存结果
outputfile <- data.frame(inputfile, 'unix' = loss) # 变量重命名,存入数据
但是出现的结果却是:
全都是NA,查了半天语法没问题,也没找到解决方法,只能再搜索资料看看哪里出了问题。
处理日期与时间戳的转换基本上有这些工具,好像还有MySQL之类的也可以处理,不过没去深究,因为Excel和python足够了,后面需要的haul再去学习其他处理方式。
时间戳看似是一个小东西,但是只有将日期转换成时间戳后,才能进行后续的一些缺失值的插值处理和计算加速度之类的操作。因此,这也是重要的一步。