python读取文件夹下面的所有csv文件,并根据文件里面的经纬度给csv文件新增一列geohash码

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)
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要给CSV文件中的地理位置加上经纬度,可以借助Python中的geopy库和pandas库来实现。具体步骤如下: 1. 使用pandas库读取CSV文件,并将地理位置信息读入到一个Series对象中。 ``` import pandas as pd df = pd.read_csv('data.csv') locations = df['Location'] ``` 2. 使用geopy库中的Nominatim类来实现地理编服务,将地理位置信息转换为经纬度坐标。这里以OpenStreetMap作为地理编服务为例。 ``` from geopy.geocoders import Nominatim geolocator = Nominatim(user_agent='my-application') # 定义一个函数,用来将地理位置信息转换为经纬度坐标 def geocode(location): try: # 调用geopy库中的geocode方法实现地理编 location = geolocator.geocode(location) return (location.latitude, location.longitude) except: return None # 遍历地理位置信息,调用geocode函数来获取经纬度坐标 coordinates = [] for location in locations: coordinate = geocode(location) coordinates.append(coordinate) ``` 3. 将获取到的经纬度坐标添加到原始数据中,并使用pandas库将数据保存到CSV文件中。 ``` df['Latitude'] = [coordinate[0] if coordinate is not None else None for coordinate in coordinates] df['Longitude'] = [coordinate[1] if coordinate is not None else None for coordinate in coordinates] df.to_csv('data_with_coordinates.csv', index=False) ``` 需要注意的是,在进行地理编服务时,需要避免频繁地请求服务,以免触发服务商的访问限制。可以考虑适当增加请求间隔时间,或者将请求结果缓存到本地以便重复使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值