#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]}