Преобразовать строку в кортеж с числами
В результате парсинга и неудачного сохранения/открытия csv-файла у меня столбец Pandas, который называется "point", содержит строки str с координатами по типу ('55.2222', '77.9999'). Каждый элемент -- это строка (и скобки тоже). Подскажите, как из этого сделать классический кортеж (55.2222, 77.9999)?
Ответы (2 шт):
tuple_ = ('55.2222', '77.9999')
print(tuple(map(float, tuple_)))
с помощью map превращаем каждый элемент в float
а если у вас tuple_ такой "('55.2222', '77.9999')" то так:
print(tuple(map(lambda x: float(x[2:-2]), tuple_[1:-1].split(", ")))
Поскольку каждый элемент целиком строка, то видимо проще всего так:
from ast import literal_eval
tuple(map(float, literal_eval("('55.2222', '77.9999')")))
Т.е. сначала превращаем строку в "настоящий" кортеж (но по-прежнему со строками внутри), а потом уже, как написал в ответе Danis, превращаем элементы кортежа из строк в float.
Для Pandas это будет выглядеть примерно так в итоге:
df['point'] = df.point.apply(lambda x: tuple(map(float, literal_eval(x))))
P.S. О том, что надо использовать в таких случаях именно literal_eval, а не просто eval, написано уже много ответов, я их не буду повторять. Кроме того, можно разобрать строку и "вручную", но раз есть для этого специальная функция - лучше воспользоваться ей, чтобы не учитывать нюансы, которые могут возникнуть.