Как вырезать часть данных из одного столбца и вставить в два новых?

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
→ Ссылка