
python-计算excel中各个地点之间的距离
记录这个主要是为了熟悉一下pandas中一些函数的应用。
首先看一下表格中的数据:

用到的是GEOID,INTPTLAT,INTPLONG。
其中GEOID是每一条数据的id,后两个字段是经纬度。
需要做的是,从GEOID中抽出几个作为目标地点。然后计算其他地点到目标地点的距离,并找出最短距离:

思路
首先我得把目标地点的id,经纬度给分别存起来:
goalID=['6001406500','6001423200','6001402700','6073008800']
goalLat=[]
goalLong=[]
result=pd.DataFrame()
for j in range(len(goalID)):
for i in range(len(ID)):
if ID[i]==int(goalID[j]):
goalLat.append(lat[i])
goalLong.append(long[i])
break
由于结果的第一列是所有ID,所以我直接赋值:
result=pd.DataFrame()
result['GEOID']=allData["GEOID"]
接下来就是计算一个所有地点到目标地点的距离,然后就往result里插入一列(用的是insert函数):
for i in range(len(goalID)):
distanceList = []
for j in range(len(ID)):
distanceList.append(math.pow((lat[j]-goalLat[i]),2)+math.pow(long[j]-goalLong[i],2))
result.insert(len(result.columns),str(goalID[i]),distanceList)
大致讲一下insert的用法,insert是插入列,首先:
第一个参数是要插入的位置,这里我们直接用 len(result.columns)
意思是默认插在末尾
第二个参数是列名
第三个参数就是要插入的数据了
把所有距离都计算并插入了,我们还要计算最小距离。
这个还是使用pandas的函数:
result["min"]=result.min(axis=1)
这里,axis=1为求每行的最小值。
最后是存储数据,这里还是用pandas的函数to_csv。
result.to_csv("result.csv",index=0)
需要注意的是,这里 inedx=0
是不需要行索引,如掉去掉这一行的话,会在最左列还有一列没有列名,列的元素为1,2,3,4...。
