我对python还是比较陌生,所以如果我问的太笨了,请先抱歉
我有包含以下列的CSV文件:“ CarNumber”,“ DateTime”,“ GPS”,“ Speed”。 GPS列包含以下形式的信息:“纬度:经度”
我要:
1)加载CSV文件
2)将GPS列拆分为纬度和经度列
3)应用Haversine公式以计算具有已知纬度和经度的两个点之间的距离。到目前为止,我已经提出了以下功能:
def distRad(glat1, glng1, glat2, glng2):
from math import sin, cos, sqrt, atan2, radians, asin
# approximate radius of earth in km
R = 6371.0
lat1 = radians(glat1)
lng1 = radians(glng1)
lat2 = radians(glat2)
lng2 = radians(glng2)
dlng = lng2 - lng1
dlat = lat2 - lat1
#a = 2 * asin((sin(dlng/2)**2+cos(lng1)*cos(lng2)*sin(dlat/2)**2)**0.5)
#c = a
a = sin(dlat / 2)**2 + cos(lat1) * cos(lat2) * sin(dlng / 2)**2
c = 2 * atan2(sqrt(a), sqrt(1 - a))
return R * c
4)使用以下列将结果上传到新的csv文件中:“ CarNumber”,“ DateTime”,“ Latitude”,“ Longitude”,“ Distance” 我知道听起来确实很简单,但我仍然需要指导
我的CSV文件的一部分:
CarNumber;DateTime;GPS;Speed
230;04.06.2019 0:00:12;87,96978 : 159,588606;20
谢谢!
答案 0 :(得分:2)
将csv加载到数据框-
df = pd.read_csv('data.csv',delimiter =',')
假设lat和long之间用:
分隔df [lat],df ['long'] = df ['GPS']。str.split(':',1).str
使用python中的Haversine包应用Haversine公式
从haversine进口haversine
df['Distance'] = haversine()
df.to_csv('check.csv',sep =',',encoding ='utf-8')
请注意,这些只是指针,我没有测试代码,但这应该使您入门。
编辑:
要遍历数据集,您可以执行以下操作
import copy
def read_csv(filepath, has_header=False):
with open(filepath, 'r') as file:
reader = csv.reader(file)
data = list(reader)
header = None
if has_header:
header = data[0]
data = data[1:]
file.close()
return data, header
codes_dict = {}
data, header = read_csv("data/your_csv.csv", has_header=True)
for row in data:
# iterate and create the map having lat long in codes_dict
答案 1 :(得分:0)
我只建议使用pandas库并使用read-csv()函数。
pd.to_csv(‘savename.csv’)
{{1}}