【问题标题】:loading CSV file, peforming certain calculations and loading result to different file加载 CSV 文件,执行某些计算并将结果加载到不同的文件
【发布时间】:2020-01-20 00:05:54
【问题描述】:

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

谢谢!

【问题讨论】:

  • 有什么问题?你的解决方案有效吗?有没有不足?它是如何不足的?你怀疑它的任何部分是罪魁祸首吗?为什么?
  • 我不知道如何加载 CSV 文件并执行以下步骤
  • 您能提供您的 CSV 部分吗?您可以直接将其作为文本粘贴到问题中。
  • 欢迎来到 SO。请使用tour 并花时间阅读How to Ask 以及该页面上的其他链接。这不是讨论论坛或教程服务。有一个 csv 模块,文档中的示例应该可以帮助您入门。
  • SH-SF,这是我的 CSV:CarNumber;DateTime;GPS;Speed 230;04.06.2019 0:02:43;40,969915 : 151,588611;7,72

标签: python


【解决方案1】:
  1. 将 csv 加载到数据框

    df = pd.read_csv('data.csv', delimiter=',')
    
  2. 假设 lat 和 long 被: 隔开

    df[lat], df['long'] = df['GPS'].str.split(': ', 1).str
    
  3. 在 python 中使用 hasrsine 包应用 hasrsine 公式

    from haversine import haversine
    df['Distance'] = haversine()
    
  4. 要将其上传到您可以使用的 csv,

    df.to_csv('check.csv', sep=',', encoding='utf-8')
    

请注意,这些只是指针,我没有测试代码,但这应该可以帮助您入门。

编辑:

要遍历 CSV 数据集,您可以执行以下操作

import csv
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)

# iterate and create the map having lat long in codes_dict
for row in data:
    # ...

【讨论】:

  • 第 1 步和第 2 步工作正常 我安装了 haversine 包,现在 df['Distance']=haversine() 出现错误 我需要指定我的经纬度列吗?
  • @MDoskarin 就像我说的,这只是一个伪代码,对于第 3 步,您需要为公式提供 lat long,否则它不会理解参数。同样阅读:pypi.org/project/haversine
  • 啊,我明白了。 lyon = (45.7597, 4.8422) # (lat, lon) paris = (48.8567, 2.3508) haversine(lyon, paris) >> 392.2172595594006 # 以公里为单位 如果我需要计算与最近点对应的点之间的距离,它将如何工作时间
  • 你需要通过遍历你的数据框来创建一个(lat long)的字典,然后计算距离。
  • 迭代很简单,google一下,你会找到很多解决方案
【解决方案2】:

我只是推荐使用 pandas 库并使用函数 read-csv()。

import pandas as pd 
df = pd.read_csv(‘nameofcsv.csv’)
print(df)

此处计算

pd.to_csv(‘savename.csv’)

【讨论】:

    猜你喜欢
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多