Как мне преобразовать координаты в формате WKT в столбцы широты и долготы

#python #pandas #dataframe #twitter #shapely

#python #pandas #фрейм данных #Twitter #стройный

Вопрос:

Я извлек данные координат из Twitter. Точки, которые я получил, находятся в формате WKT. Я хочу разделить их на два столбца широты и долготы. Формат координат

 {'type': 'Point', 'coordinates': [77.58168, 12.8952]}
{'type': 'Point', 'coordinates': [77.64363, 12.9739]}
{'type': 'Point', 'coordinates': [75.9372318, 12.44627712]}
{'type': 'Point', 'coordinates': [77.5945627, 12.9715987]}
{'type': 'Point', 'coordinates': [77.53584257, 13.05144109]}
{'type': 'Point', 'coordinates': [77.5945627, 12.9715987]}
{'type': 'Point', 'coordinates': [77.58721, 12.96643]}
  

Я удалил все знаки препинания и ненужный текст с помощью str.replace

 df['coordinates'] = df.coordinates.str.replace('type,?' , '')
df['coordinates'] = df.coordinates.str.replace('Point,?' , '')
df['coordinates'] = df.coordinates.str.replace('coordinates,?' , '')
df['coordinates'] = df.coordinates.str.replace('{,?' , '')
df['coordinates'] = df.coordinates.str.replace(',,?' , '')
df['coordinates'] = df.coordinates.str.replace(':,?' , '')
df['coordinates'] = df.coordinates.str.replace('],?' , '')
df['coordinates'] = df.coordinates.str.replace(',?' , '')
df['coordinates'] = df.coordinates.str.replace('},?' , '')
df['coordinates'] = df.coordinates.str.replace("'',?" , "")
  

Я попытался разделить столбец с помощью

 df = pd.DataFrame(df.coordinates.str.split(' ',1).tolist(),
                             columns = ['Long','Lat'])
  

Но это не работает.
Пожалуйста, дайте мне знать, что можно сделать для преобразования WKT в столбцы координат

Ответ №1:

geopandas Документы охватывают импорт данных в формате WKT с использованием shapely . В их примере, учитывая ваш df фрейм данных, вы могли бы попробовать:

 from shapely import wkt
import geopandas as gpd

df['coordinates'] = df['coordinates'].apply(wkt.loads)

gdf = gpd.GeoDataFrame(df, geometry='coordinates')
  

Если вы хотите, вы можете получить широту и длину и назначить обратно исходному фрейму данных, выполнив следующие действия.

 df['lat'] = gdf.geometry.x
df['long'] = gdf.geometry.y
  

Поскольку вы не предоставили полный минимальный рабочий пример, я не тестировал этот код, но я думаю, что он должен работать.

Комментарии:

1. Формат координаты из твита {‘type’: ‘Point’, ‘coordinates’: [77.58168, 12.8952]} Я попытался применить ваш метод, но он не работает. Ошибка: ParseException: Неизвестный тип: ‘{‘TYPE’:’ Я попытался удалить другой текст, кроме POINT, но проблема не устранена ParseException: неизвестный тип: «ТОЧКА» Пожалуйста, помогите мне с этим.

2. Я думаю, что аргумент, который необходимо передать для геометрии точек в wkt.loads, представляет собой строку вида 'Point (77.58168 12.8952)' . Если бы я знал, как выглядят ваши данные, я мог бы помочь вам преобразовать их в этот формат.

3. df.[coordinates] = {‘тип’: ‘Точка’, ‘координаты’: [77.58168, 12.8952]} {‘ введите’: ‘Точка’, ‘координаты’: [77.64363, 12.9739]} {‘ введите’: ‘Точка’, ‘координаты’: [75.9372318,12.44627712]} {‘тип’: ‘Точка’, ‘координаты’: [77.5945627, 12.9715987]} {‘ введите’: ‘Точка’, ‘координаты’: [77.53584257, 13.05144109]} {‘ введите’: ‘Точка’, ‘координаты’: [77.5945627, 12.9715987]}{‘тип’: ‘Точка’, ‘координаты’: [77.58721, 12.96643]} {‘ введите’: ‘Точка’, ‘координаты’: [77.81167482, 13.07899418]} {‘ введите’: ‘Точка’, ‘координаты’: [76.4481516, 9.78418701]}