#python #regex #python-3.x
#python #регулярное выражение #python-3.x
Вопрос:
У меня есть набор данных, содержащий, например:
A B C
---- ----- -----
a - 0
b -16 2
c - 2
Я хочу удалить строки только с тире (-), ожидаемый результат:
A B c
--- --- ---
a nan 0
b -16 2
c nan 2
Комментарии:
1. Что вы пробовали? Что не сработало? Что вы получили? Чего вы ожидали? Что не работает с вашим кодом и где это?
2. Вы хотите игнорировать
-----------------
строку?3. Я только что отредактировал вопрос. Я хочу удалить строки с полями, содержащими (-).
4. @Toto Я устал использовать df1[df1.columns[1]].map(лямбда x:re.sub(«[^0-9.]»,»», x)) и метод replace, оба также изменяют отрицательные значения.
Ответ №1:
Это удаляет -
только тогда, когда за ним не следует цифра:
re.sub(r'-(?!d)', 'nan', s)
Комментарии:
1. Большое вам спасибо, это отлично сработало для моей проблемы.
2. единственная проблема в том, что когда число идет со знаком $ или%, этого регулярного выражения недостаточно.
3. @ann: Не могли бы вы привести несколько примеров с дополнительным знаком и ожидаемым результатом?
4. если есть какие-либо специальные символы только в поле, то его следует заменить на np.nan и любые специальные символы, связанные с числом, например: $ 40 следует читать как 40., 45% следует читать как 45.
5. @ann: Насколько я понимаю, вам нужно запустить 2 регулярных выражения, второе может быть:
re.sub('[^d-] (d )D ', 1)
оно удалит не цифру или точку перед числом и не цифру после числа ничем, сохранит только цифры. Скажите мне, работает ли это, и я добавлю в ответ.
Ответ №2:
Если вы используете pandas
и numpy
, вы можете сделать это с помощью.
df = df.replace("-", np.nan)
Вывод:
A B c
a NaN 0
b -16 2
c NaN 2
Комментарии:
1. Спасибо. Это тоже работает, но для моего сценария я предпочел регулярное выражение.