Вместо того, чтобы удалять ненужные символы, просто укажите шаблон, который вы хотите найти, и извлеките его.Это должно быть гораздо менее подвержено ошибкам.Вы хотите извлечь положительное и отрицательное число, которое может быть плавающей точкой:
import re
number_match = re.search("[+-]?(\d+,?)*(\.\d+)?", 'Your string.')
number = number_match.group(0)
Тестирование кода выше:
test_string_positive='14,513.045Non-compliant with installation req.'
test_string_negative='-234.670Non-compliant with installation req.'
In [1]: test=re.search("[+-]?(\d+,?)*(\.\d+)?",test_string_positive)
In [2]: test.group(0)
Out[2]: '14,513.045'
In [3]: test=re.search("[+-]?(\d+,?)*(\.\d+)?",test_string_negative)
In [4]: test.group(0)
Out[4]: '-234.670'
С этим решением вы не хотите делать замену, новместо этого просто присвойте значение соответствия регулярному выражению.
number_match = re.search("[+-]?(\d+,?)*(\.\d+)?", <YOUR_STRING>)
number = number_match.group(0)
dataframe3['single_chainage2'] = number
Я разделил это на 3 строки, чтобы показать вам, как оно логически следует.Надеюсь, это имеет смысл.
Вы должны заменить значение <YOUR_STRING>
строковым представлением данных.Что касается того, как извлечь строковое значение из Pandas DataFrame, этот вопрос может иметь некоторые ответы на это.Я не уверен в том, как на самом деле выглядит ваш DataFrame, но думаю, что-то вроде df['single_chainage'][0]
должно работать.В основном, если вы индексируете в Pandas, он возвращает некоторую специфическую информацию для Pandas, и если вы хотите получить только саму строку, вы должны указать это явно.