Столбец Pandas - преобразовать строку в точку Shapely с помощью функции map()

У меня есть набор данных наблюдений, который содержит данные (широта, долгота) в виде строк в следующем формате:
'POINT (30.6280359000000004 -96.3051219999999972)'
'POINT (40.7815247999999997 -74.0058204000000046)'

Я пытаюсь проанализировать эти строки как точки Shapely, чтобы их можно было использовать в кадре данных GeoPandas. Я написал простую функцию для разбора строк: parse_point. Это прекрасно работает с одной тестовой строкой, созданной из одной записи в столбце Pandas, над которым нужно работать, «GeoTagStart». Однако функция карты выдает ошибку - индекс списка вне допустимого диапазона, см. ниже. Используя print во время выполнения кода, я вижу, что приведенная ниже функция pandas map() обрабатывает столбец как один массив или список, тогда как я понял, что функция map() для столбца Pandas работает построчно. строка. Любые идеи, где я ошибаюсь, пожалуйста, и как заставить это работать? Наверное, это что-то простое, но я этого не вижу. Спасибо!

from shapely.geometry import Point

def parse_point(record):
    pieces = record.split() # splits each record into a list of 3
    x = float(pieces[1].lstrip('(')) # latitude
    y = float(pieces[2].rstrip(')')) # longitude 
    point = Point(x,y) # convert to Shapely Point
    return point

test1 = df['GeoTagStart'][3]
test2 = df['GeoTagStart'][50]    

print(parse_point(test1))
assert type(parse_point(test1)) == Point # this works fine, returns  shapely.geometry.point.Point

print(parse_point(test2))
assert type(parse_point(test2)) == Point # this works fine

df['new_col'] = df['momGeoTagStart'].map(lambda x: parse_point(x)) # this throws an error: 

<ipython-input-5-92a2b4f58255> in <lambda>(x)
     24 assert type(parse_point(test2)) == Point
     25 
---> 26 df['new_col'] = df['GeoTagStart'].map(lambda x: parse_point(x))
     27 

<ipython-input-5-92a2b4f58255> in parse_point(record)
     13 def parse_point(record):
     14     pieces = record.split()
---> 15     x = float(pieces[1].lstrip('('))
     16     y = float(pieces[2].rstrip(')'))
     17     point = Point(x,y)

IndexError: list index out of range

person LucieCBurgess    schedule 03.05.2018    source источник
comment
На мой взгляд, ошибка означает, что pieces = record.split() возвращает не список длиной 3, а пустой или список длиной 1 или 2. Итак, проблема с данными.   -  person jezrael    schedule 03.05.2018
comment
У вас определенно есть какие-то недостающие данные или просто данные, которые не соответствуют вашему шаблону. Проверь это.   -  person zipa    schedule 03.05.2018
comment
И вы можете проверить это по print (df[df['GeoTagStart'].str.len() != 3])   -  person jezrael    schedule 03.05.2018
comment
Хорошо, большое спасибо за внимание - я попробую и отчитаюсь...   -  person LucieCBurgess    schedule 03.05.2018
comment
Проблема решена - комбинация нескольких мошеннических точек данных с дополнительными символами глубоко в файле, а некоторые из них являются NaN. Спасибо за вашу помощь!   -  person LucieCBurgess    schedule 03.05.2018