Как вырезать часть данных из одного столбца и вставить в два новых?
import pandas as pd
data = {'Данные': ['$@#$32435354, 53.2555095749943, 83.6533059729708',
'набор символов*?:И*?И*И, 53.2555095749943, 83.6533059729708',
'&V$%$&$ CV&HJjh gffw erw, 53.25932749912, 83.6534465959292',
'^VB*%B9m 40d8734,m50 t789345, 53.25932749912, 83.6534465959292']}
data2 = pd.DataFrame(data)
data2.sort_values(['Данные'], axis=0, ascending=True, inplace=True)
data2.to_excel('test1.xlsx')
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Можно использовать одно и то же регулярное выражение для извлечения координат и для того, чтобы вырезать их из текста:
pat = r",\s*\b(\d+\.\d+),\s*\b(\d+\.\d+)\b"
data2[["Широта", "Долгота"]] = data2["Данные"].str.extractall(pat).reset_index(level=1, drop=True).astype(float)
data2["Данные"] = data2["Данные"].str.replace(pat, "", regex=True)
Или же можно сделать тоже самое однострочником:
pat = r"^(.*),\s*\b(\d+\.\d+),\s*\b(\d+\.\d+)\s*$"
data2[["Данные", "Широта", "Долгота"]] = \
data2["Данные"].str.extractall(pat).reset_index(level=1, drop=True)
результат:
In [10]: data2
Out[10]:
Данные Широта Долгота
0 $@#$32435354 53.2555095749943 83.6533059729708
2 &V$%$&$ CV&HJjh gffw erw 53.25932749912 83.6534465959292
3 ^VB*%B9m 40d8734,m50 t789345 53.25932749912 83.6534465959292
1 набор символов*?:И*?И*И 53.2555095749943 83.6533059729708

