Похоже, что вы планировали очистить значение поля (замените его пустой строкой), если вся строка состоит из знаков препинания.
Вы можете сделать это с помощью
tmp.str.replace(r'^(?:[^\w\s]|_)+$', '')
См. Демоверсию regex . ПРИМЕЧАНИЕ : Если вы планируете очистить только значения строк, которые состоят только из ASCII пунктуации , вы можете использовать string.punctuation
:
tmp.str.replace(f"^[{''.join(map(re.escape,string.punctuation))}]+$", '')
print(f"[{''.join(map(re.escape,string.punctuation))}]")
показывает [!"\#\$%\&'\(\)\*\+,\-\./:;<=>\?@\[\\\]\^_`\{\|\}\~]
, см. онлайн-демонстрацию . Как и ожидалось, он не соответствует пунктуации, такой как ’
, ‘
, “
, ”
, «
, »
, et c.
Details
^
- начало строки (?:
- начало группы без захвата [^
- начало класса отрицательных символов (он будет соответствовать всем символам, НО указанным внутри него): \w
- символы слова (любые буквы, цифры и Unicode _
) \s
- любой код Unicode пробел
]+
- конец класса, +
повторяется 1 или более раз |
- или _
- подчеркивание
)
- конец группы $
- конец строки.
Pandas тест:
>>> tmp.str.replace(r'^(?:[^\w\s]|_)+$', '')
0 k.; mlm
1
2 a;b/c
3 !".: abc
4 abc dfg
5 qwert@
dtype: object