python读取文件夹下面的所有csv文件,并对文件里面的经纬度进行geohash编码后作为新增列保存到csv文件里面
代码如下:(注:这段代码处理csv文件里面只有两列没有列名的数据,分别是经度和纬度)
import geohash as gh
import os
import pandas as pd
for info in os.listdir("E:\geohashData\jwdt1"):#文件夹的路径
domain = os.path.abspath(r"E:\geohashData\jwdt1") #获取文件夹的路径
info = os.path.join(domain,info) #将路径与文件名结合起来就是每个文件的完整路径
data = pd.read_csv(info,header=None,names=['longitude','latitude'])#读数据并为这两列数据新增列名
#data1=pd.DataFrame(data,columns=['latitude','longitude'])
data_list=[]
latitude=data["latitude"]
longitude=data["longitude"]
for i in range(1,960357): #这里需要改进,这里的数据我是先print(data)得到数据的行数以后又把行数放进去的,太low了,以后有机会改进
geohash=gh.encode(float(latitude[i-1]),float(longitude[i-1]))#geohash将经纬度编码
data_list.append([latitude[i-1],longitude[i-1],geohash])#将经纬度和geohash码放到数组中
df=pd.DataFrame(data_list,columns=['latitude','longitude','geohash'])#给数据对应的列名
df.to_csv("e:/geohashR/geohashR11.csv",index=None)#保存生成的csv文件
当csv文件里面混杂着除了经纬度以外的其他数据时,处理代码如下(注:下面的代码我还没调试成功,仅供参考)
import geohash as gh
import os
import pandas as pd
for info in os.listdir("E:\geohashData\hashTestData.csv"):#
domain = os.path.abspath(r"E:\geohashData\hashTestData.csv") #
info = os.path.join(domain,info) #将路径与文件名结合起来就是每个文件的完整路径
#data = pd.read_csv(info)
data = pd.read_csv(info,header=None,names=['_C0','_C1','_C2','longitude','latitude','_C5','_C6','_C7','_C8','_C9','_C10','_C11','_C12','_C13'])
data
#data1=pd.DataFrame(data,columns=['latitude','longitude'])
data_list=[]
latitude=data["latitude"]
longitude=data["longitude"]
#latitude=data["latitude"]
#print(latitude[1])
for i in range(1,1044273):
try:
geohash=gh.encode(float(latitude[i-1]),float(longitude[i-1]))
data_list.append([_C0[i-1],_C1[i-1],_C2[i-1],longitude1[i-1],latitude[i-1],geohash,_C5[i-1],_C6[i-1],_C7[i-1],_C8[i-1],_C13[i-1]])
except KeyError:
continue
df=pd.DataFrame(data_list,columns=['_C0','_C1','_C2''longitude1','latitude','geohash''_C5','_C6','_C7','_C8','_C13'])
df.to_csv("e:/geohashR/geohashR.csv",index=None)
来源:CSDN
作者:Mr zhu's little cute
链接:https://blog.csdn.net/qq_44648061/article/details/103831299