加载CSV文件,执行某些计算并将结果加载到其他文件

时间:2019-09-19 02:14:12

标签: python

我对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

谢谢!

2 个答案:

答案 0 :(得分:2)

  1. 将csv加载到数据框-

    df = pd.read_csv('data.csv',delimiter =',')

  2. 假设lat和long之间用:

    分隔

    df [lat],df ['long'] = df ['GPS']。str.split(':',1).str

  3. 使用python中的Haversine包应用Haversine公式

    从haversine进口haversine

    df['Distance'] = haversine()
    
    1. 要将其上传到csv,可以使用

    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}}