Как преобразовать (широту, долготу) столбца строк в столбец с плавающей точкой? - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть фрейм данных, который показывает время и координаты GPS, выглядит так:

2019-02-15 15:32:00 55.652480   12.510514

Мне нужно передать его функции, которая выглядит следующим образом:

import math

def haversine(coord1, coord2):
    R = 6372800  # Earth radius in meters
    lat1, lon1 = coord1
    lat2, lon2 = coord2

    phi1, phi2 = math.radians(lat1), math.radians(lat2) 
    dphi       = math.radians(lat2 - lat1)
    dlambda    = math.radians(lon2 - lon1)

    a = math.sin(dphi/2)**2 + \
        math.cos(phi1)*math.cos(phi2)*math.sin(dlambda/2)**2

    return 2*R*math.atan2(math.sqrt(a), math.sqrt(1 - a))

for n in clean["gps"]:
    print(n)

    for city, coord in crimepoints.items():
        distance = haversine(n, coord)
        print(city, distance)
        if distance <= 500:
            print('alarm')
            print(distance)
            crimelist.append(city)
            crimelist.append(distance)

Эта функция принимает данные, которые выглядят следующим образом: ord = 51.5073219, -0.1276474 два числа с плавающей запятой. Поэтому я использовал это:

clean["gps"] = clean["latitude"].map(str) + "," + " " + clean["longitude"].map(str)

2019-02-15 15:32:00 55.652480   12.510514   55.652480000000004, 12.510514

, чтобы поместить широту и долготу в одну переменную.Проблема в том, что я не могу превратить строку в 2 числа с плавающей точкой, которые сейчас находятся в одной переменной.Я пробовал многие вещи, такие как float (), ast.literal_eval (), map (float, test.split (',')), но безрезультатно.

Я получаю эту ошибку при функции сбора данных:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-190-84732733cea4> in <module>
     44 
     45     for city, coord in crimepoints.items():
---> 46         distance = haversine(n, tok)
     47         print(city, distance)
     48         if distance <= 500:

<ipython-input-190-84732733cea4> in haversine(coord1, coord2)
      3 def haversine(coord1, coord2):
      4     R = 6372800  # Earth radius in meters
----> 5     lat1, lon1 = coord1
      6     lat2, lon2 = coord2
      7 

ValueError: too many values to unpack (expected 2)

1 Ответ

1 голос
/ 19 сентября 2019

В приведенном ниже коде я использую вспомогательную функцию с плавающей точкой для преобразования числа с плавающей точкой из строки, содержащейся в одной переменной:

sampleInp = "55.652480000000004, 12.510514"
def convert_float(inp):
    splitted_data = inp.split(",")
    return float(splitted_data[-2]), float(splitted_data[-1])
lat, long = convert_float(sampleInp)
print("Types : ",type(lat), type(long), "Values: ", lat, long)

Вывод:

Types :  <class 'float'> <class 'float'> Values:  55.652480000000004 12.510514

Надеюсь, это поможет!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...