У меня есть набор данных наблюдений, которые содержат данные (широта, долгота) в виде строк в следующем формате:
'POINT (30.6280359000000004 -96.3051219999999972)'
'POINT (40.7815247999999997 -74.0058204000000046)'
Я пытаюсь проанализировать эти строки как точки Shapely, чтобы их можно было использовать в кадре данных GeoPandas. Я написал простую функцию для разбора строк: parse_point
. Это прекрасно работает с единственной тестовой строкой, сделанной из одной записи в столбце Pandas, для работы с которой «GeoTagStart». Тем не менее, функция map выдает индекс ошибки списка вне диапазона, см. Ниже. Используя print во время выполнения кода, я вижу, что функция map () pandas ниже обрабатывает столбец как отдельный массив или список, тогда как я понял, что функция 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