Python 将日期文本数据转换为时间戳

  • Post author:
  • Post category:python


所给的实验数据txt中的数据格式如下:

数据为武汉市出租车轨迹数据格式:1.车辆ID, 2.GPS时间, 3.经度, 4.纬度, 5.方向(度), 6.速度(km/h), 7.空/重载

将日期文本转换为时间戳,可以方便后面数据处理。

import time

#时间戳转化函数
def get_timestamp(timeStr):
    timeArray = time.strptime(timeStr, '%Y-%m-%d %H:%M:%S')  # 按照对应的格式转换为时间数组time.strptime()
    timeStamp = int(time.mktime(timeArray))  # 转换成整形时间戳 time.mktime()
    return timeStamp

实例:

# 导入需要用的包
import pandas as pd
import numpy as np
from pathlib import Path
import time

#时间戳转化函数
def get_timestamp(timeStr):
    timeArray = time.strptime(timeStr, '%Y-%m-%d %H:%M:%S')  # 按照对应的格式转换为时间数组time.strptime()
    timeStamp = int(time.mktime(timeArray))  # 转换成整形时间戳 time.mktime()
    return timeStamp

path="D:\Wuhan_GPS_txt--[20140501-0507]\\0501"  #我这个文件夹下有多个txt文件 下面的方法直接遍历了这一个文件夹下的所有txt里的所有数据
p=Path(path)

df = pd.DataFrame(columns=['车辆ID', 'GPS时间', '经度', '纬度', '方向', '速度', '载客情况'])    #创建一个新的dataframe
for file_name in p.rglob('*.txt'):  # 通过pathlib.Path.rglob()方法可以直接遍历汇总所有文件的绝对路径,直接用pandas读取即可
    file = pd.read_csv(file_name, header=None, names=['车辆ID', 'GPS时间', '经度', '纬度', '方向', '速度', '载客情况'],
                                dtype={'车辆ID': str, 'GPS时间': str, '经度': str, '纬度': str, '方向': str, '速度': str, '载客情况': str})
#筛选出数据在(5,100)间的  详见上一篇文章
    Var = range(5, 100)
    datas=(file.loc[file['速度'].astype(int).isin(Var), :])
    df = df.append(datas)   

gps1 = pd.DataFrame(df)

#时间文本转换为时间戳
gps1['GPS时间']=gps1.apply(lambda x:get_timestamp(x['GPS时间']),axis=1)

print(gps1)

结果如下:

 车辆ID       GPS时间          经度         纬度   方向  速度 载客情况
0         1681  1398873600  114.217807  30.585105  142   6    1
4         4372  1398873600  114.234907  30.520688   20  43    0
7          818  1398873600  114.193848  30.525937  208  27    1
9         4352  1398873600  114.298295  30.591088  202  54    1
10        6762  1398873600  114.260050  30.571873  254   7    1
12        1325  1398873600  114.242035  30.539787  354  55    1
14        6884  1398873600  114.255268  30.552235   98  22    0
16        1771  1398873600  114.401548  30.621580  122  12    0
17        7831  1398873600  114.311960  30.523927  312  14    1
19        8463  1398873600  114.342152  30.592568  246  21    1
20        5499  1398873600  114.229087  30.554255   98  25    1
21         492  1398873600  114.399453  30.497922  184  43    1
23        7291  1398873600  114.364668  30.614442  240  35    0
25        8694  1398873600  114.414713  30.473833  180  65    0
26        5819  1398873600  114.304048  30.521017  158  43    1
27        1840  1398873600  114.212743  30.588020  116  49    1
28        5693  1398873600  114.274510  30.623698  256  26    1
31        5378  1398873600  114.404172  30.476123   96  36    1
32        5061  1398873600  114.236407  30.517813   28  59    1
33         764  1398873600  114.320978  30.546572   86  29    1
34        5040  1398873600  114.252767  30.552612   96  31    1
35        8562  1398873600  114.257872  30.602428  352  58    0
36        4414  1398873600  114.326357  30.591445  220  18    1
37        4537  1398873600  114.332772  30.519813   46  39    0
38        8269  1398873600  114.313623  30.647448  216  10    0
40        4139  1398873600  114.305478  30.543020  286   5    1
43        1858  1398873600  115.055302  30.227522  314  51    0
44        5128  1398873600  114.321900  30.515305   94  22    1
45        8789  1398873600  114.322485  30.574716  298  25    0
47        4264  1398873600  114.348937  30.588982   52  41    1
...        ...         ...         ...        ...  ...  ..  ...
1172704   6396  1398895199  114.420207  30.610783  156  50    1
1172710  10109  1398895199  114.259192  30.618997   76  27    0
1172715   7235  1398895199  114.407730  30.489717  278  54    1
1172717   1671  1398895199  114.271808  30.658025   46  42    1
1172726   5486  1398895199  114.240310  30.577857  272  72    0
1172737   3849  1398895199  114.288778  30.604562  126  49    0
1172743   7590  1398895199  114.239662  30.613773   32  15    0
1172746    764  1398895199  114.362340  30.522213  120  59    0
1172748   2879  1398895199  114.248987  30.616537  248   7    0
1172750    112  1398895199  114.303408  30.614643  252  37    1
1172752   8182  1398895199  114.241277  30.613327  240  39    0
1172753   4264  1398895199  114.227615  30.635330  330  61    1
1172756   6643  1398895199  114.251583  30.619760  102  13    0
1172760   2625  1398895199  114.290003  30.800063  284  23    0
1172762   7831  1398895199  114.282537  30.552353  302  62    1
1172763    971  1398895199  114.281766  30.607180   26  23    1
1172764   7939  1398895199  114.276788  30.624322   58  12    1
1172774   8585  1398895199  114.368812  30.520423  104  64    1
1172776   5569  1398895199  114.321687  30.659125   88  31    0
1172779   8734  1398895199  114.261615  30.537138  178  43    0
1172780   7939  1398895199  114.276788  30.624322   58  12    1
1172781   5040  1398895199  114.255190  30.594853  234  50    0
1172785   6186  1398895199  114.301947  30.425998  178  49    0
1172786    468  1398895199  114.325818  30.538480  212  41    1
1172792   1192  1398895199  114.162612  30.498413  214  29    1
1172797  12213  1398895199  114.114000  30.632076  195  51    0
1172798  12213  1398895199  114.114000  30.632076  195  51    0
1172799  12511  1398895199  114.224444  30.651836  273  18    0
1172802   4614  1398895199  114.328838  30.657912  192  24    0
1172803   9500  1398895199  114.307232  30.613332  302  71    0

[1176367 rows x 7 columns]

pandas对dataFrame中某一个列的数据进行处理:

dataFrame的数据,想对某一个列做逻辑处理,生成新的列,或覆盖原有列的值

1.对单列进行处理:

df[“列名”]=df.apply(lambda x:方法名(x,入参2),axis=1)

说明:

1、方法名为单独的方法名,可以处理传入的x数据

2、x为每一行的数据,做为方法的入参1;x中的数据可以用 x[‘列名’]来获取

3、入参2等为方法需要的其他参数,不需要可以不写

4、axis=1,表示每次取一行数据进行处理,按行处理;axis=0,表示按列处理。

2.对多列进行操作:

有两种不同的写法:

df ['列名'] = df.apply(lambda x: 方法名(x['列名1'],x['列名2']), axis=1)
df['列名'] = df.apply(方法名,args= (  sum_test(df['列名1'],df['列名2'] ), axis=1)



版权声明:本文为weixin_45936508原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。