Mam dane .txt, w których kolumny 6 i 7 są pozycją GPS w formularzu:

50;18.5701400N,4;07.7693770E

Kiedy przeczytałem go przez read_csv, staram się przekonwertować go do współrzędnych kartezjańskich za pomocą konwerterów. Napisałem funkcję konwertera

convertFunc = lambda x : float((x[0:5]+x[6:12]).replace(';','.'))
convert = {6:convertFunc,7:convertFunc}

Kiedy używam go na pojedynczej wartości, działa, jak chciałbym:

convertFunc(myData.Lat[1])
Out [159]:  55.187110250000003

Kiedy próbuję go użyć w Read_CSV, nie działa

myData = DataFrame(read_csv('~/data.txt', sep=',' names=['A', 'B', 'C', 'D', 'E', 'Lat', 'Long'],converters=convert))

Mam błąd:

...
convertFunc = lambda x : float((x[0:5] + x[6:12]).replace(';', '.'))
ValueError: invalid literal for float(): DGPS ongitu

Nie wiem, gdzie się myli, czy to, co zrozumiałem w przetwornikach? A może ktoś zna dobry sposób (pakiet) do pracy z danymi GPS w tej formie?

(Myślę, że może to być pewien problem z lambda, kiedy chcę zastosować moją funkcję do kolumny Mam błąd: TypeError: only length-1 arrays can be converted to Python scalars)

2
tomasz74 21 wrzesień 2012, 04:56

2 odpowiedzi

Najlepsza odpowiedź

Ten konwerter jest nieco hakiem; Czy mogę polecić coś bardziej solidnego?

def convert_dmds(s):
    deg, min = s[:-1].split(';')
    sign = 1 if s[-1] in 'NE' else -1
    return sign * (float(deg) + float(min) / 60.0)

def convert_gps(s):
    lat, lon = s.split(',')
    return (convert_dmds(lat), convert_dmds(lon))

Ponadto błąd wskazuje, że próbujesz przekonwertować coś, co wyraźnie nie jest ciągiem GPS - być może wiersz nagłówka?

5
nneonneo 21 wrzesień 2012, 01:12

Twój konwertor nie jest w porządku.

In [67]: convertFunc = lambda x : float((x[0:5]+x[6:12]).replace(';','.'))

In [68]: convertFunc('4;07.7693770E')
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
...
ValueError: invalid literal for float(): 4.07.693770

W górnej części konwertera podejrzanego, myślę, że stosujesz konwerter do niewłaściwej kolumny (spójrz na wyjątek, który otrzymujesz).

0
Wouter Overmeire 21 wrzesień 2012, 07:06