所给的实验数据txt中的数据格式如下:
将日期文本转换为时间戳,可以方便后面数据处理。
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 版权协议,转载请附上原文出处链接和本声明。