python出租车轨迹数据预处理之二——文件批量处理及try的使用

本蓝昨天干完马忠以后,特别兴奋,今天早上就拿代码进行试验,结果您猜怎么着?jupyter崩了!我很不服气,于是我又试了一次,又崩。我问了我老师,老师说很有可能是机器的问题,我笑了,有借口换电脑了。后来我一寻思,换完电脑要是还崩,我估计秋收的活也是我干了(本蓝这两天在种地,学校不开学让我成了一个快乐的农村娃)。于是我听取了我同学小可条的建议,采用分批处理。
话说回来,也怪我图省事,本来人家按照每辆车分的一个一个的文件,让我用一行代码整合了:

type *.txt > a.txt 

这行代码便是罪恶之源,它可以将文件夹中所有的txt合并到a.txt,由此我的思维就被它捆绑住了,总想一口吃个大胖娘们,可是就像我昨天说的,企者不立,跨者不行,还是要一个一个处理。
于是乎本蓝遇到的第一个问题是如何让文件批量打开,并且处理(吃瓜群众:废话!)本蓝的文件命名很优秀,是按照等差数列命名的:1,2,3,4,5,等等…于是我想到,以文件名滚动读取(先试试10个文件):

for i in range(1,11):
    taix(i)

这样就可以给taix函数一个滚动的文件名(序号),接下来的任务就是在taix中读取、处理、保存数据。

 fpath = "C:/Users/PC-2019-3-24/Desktop/文件/数据/taxi_log_2008_by_id/" + count + ".txt"#打开神秘的文件

这样弄随着count的滚动,文件名也在改变,不过,就像刘老根3中山杏对大胖说得那样:你想啥美事呢!对,这样报错了,原因是文件路径想要的是字符串,而我却给了它一个int,它并不开心,而我却说我为它付出了全部。我们不适合也不想认输……

def taix(count1):
    count=str(count1)
    print(count)
    fpath = "C:/Users/PC-2019-3-24/Desktop/文件/数据/taxi_log_2008_by_id/" + count + ".txt"#打开神秘的文件

这样就可以啦~我强制int转换成了str,你不要,我就给,不喜欢你也得给我接着!
可惜,人世间的痛苦怎能是凡人能够预料的,果然,爱情不是我想买,想买就能买。它又给我上了深深的一课,事情是这样的:
本蓝按照昨天的代码进行实验:

 	ratings = pd.read_csv(fpath,names=["id","date","jingdu","weidu"])#给每个列取个名字,经度纬度用拼音代替
    ratings.head()#展示一下
    df=ratings["date"].str.split(' ',expand=True)#将date这行,以空格分割
    df.dropna(axis=0, how='any', inplace=True)#-------------删除空数据所在行
    data=ratings.drop('date',axis=1).join(df)#将分割好的date加回母体
    data.rename(columns={
    
    0:'date',1:'time'},inplace=True)#为0,1取名
    print(data.shape[0])#看看有几行
    data1=pd.DataFrame(data)#转换为数据流为设定阈值做准备
    data2=[]#创建空数组
    data4=[]
    n=0
    m=0
    for i in data['jingdu']:
        if i > 115.7 and i<117.4:        #阈值
            #print(data.loc[n])
            data2.append(data.loc[n]) #将合格的宝贝加入新数组
        #print(n) 
        n=n+1
    data2=pd.DataFrame(data2)
    for j in data2['weidu']:
        if j > 35 and j<45:
            data4.append(data2.loc[m])
        m=m+1
        #print(m)

然后它给我扔出来一个错误KeyError:1300,我查了一下,是数据库有非法字符,不知道对不对,希望有了解的大神指点我一下,我现在还是不知道这是什么原因。
我顿时就蒙了,脑子里回想的都是叶挺将军的诗:为人进出的门紧锁着,为狗爬出的洞敞开着,一个声音高叫着,爬出来吧,给你自由!我渴望自由,可我深深的知道,人的身躯怎能从这狗洞里爬出!我等待着有一天,地下烈火冲腾,将我和这活棺材一起烧掉,我将在烈火和热血中得到永生!
咳咳,不是凑字数,其实本蓝很文艺呢~哎,遇到这种问题的第一要义就是:惹不起还躲不起吗?于是我想到了错误的处理,绕着keyerror走:

 try:
        for i in data['jingdu']:
            if i > 115.7 and i<117.4:        #阈值
                #print(data.loc[n])
                data2.append(data.loc[n]) #将合格的宝贝加入新数组
            #print(n) 
            n=n+1
    except KeyError:
        pass
    
    data2=pd.DataFrame(data2)
    try: 
        for j in data2['weidu']:
            if j > 35 and j<45:
                data4.append(data2.loc[m])
            m=m+1
            #print(m)
    except KeyError:
        pass

这样就解决了可恶的问题,剩下的就是保存了:

    data4=pd.DataFrame(data4)
    savePath='C:/Users/PC-2019-3-24/Desktop/文件/数据/taxi_log_2008_by_id/00000000'+count+'.csv'#设置保存路径
    data4.to_csv(savePath, header=False, index=False, sep=',')#保存为csv文件

以下贴出完整代码:

import pandas as pd
import numpy as np
from pandas import DataFrame
def taix(count1):
    count=str(count1)
    print(count)
    fpath = "C:/Users/PC-2019-3-24/Desktop/文件/数据/taxi_log_2008_by_id/" + count + ".txt"#打开神秘的文件
    ratings = pd.read_csv(fpath,names=["id","date","jingdu","weidu"])#给每个列取个名字,经度纬度用拼音代替
    ratings.head()#展示一下
    df=ratings["date"].str.split(' ',expand=True)#将date这行,以空格分割
    df.dropna(axis=0, how='any', inplace=True)#-------------删除空数据所在行
    data=ratings.drop('date',axis=1).join(df)#将分割好的date加回母体
    data.rename(columns={
    
    0:'date',1:'time'},inplace=True)#为0,1取名
    print(data.shape[0])#看看有几行
    data1=pd.DataFrame(data)#转换为数据流为设定阈值做准备
    data2=[]#创建空数组
    data4=[]
    n=0
    m=0
    try:
        for i in data['jingdu']:
            if i > 115.7 and i<117.4:        #阈值
                #print(data.loc[n])
                data2.append(data.loc[n]) #将合格的宝贝加入新数组
            #print(n) 
            n=n+1
    except KeyError:
        pass
    
    data2=pd.DataFrame(data2)
    try: 
        for j in data2['weidu']:
            if j > 35 and j<45:
                data4.append(data2.loc[m])
            m=m+1
            #print(m)
    except KeyError:
        pass
    
        
    data4=pd.DataFrame(data4)
    savePath='C:/Users/PC-2019-3-24/Desktop/文件/数据/taxi_log_2008_by_id/00000000'+count+'.csv'#设置保存路径
    data4.to_csv(savePath, header=False, index=False, sep=',')#保存为csv文件
for i in range(1,11):
    taix(i)

哈哈哈,完事了!继续干马忠!

猜你喜欢

转载自blog.csdn.net/weixin_44843629/article/details/105935699