#python #regex #pandas #string
#python #регулярное выражение #pandas #строка
Вопрос:
Я пытаюсь написать регулярное выражение для фильтрации столбца pandas предложений, который у меня есть.
Моя цель — использовать только английские символы, такие как [a-zA-Z]
, но я также хотел бы разрешить некоторые специальные символы, такие как апострофы [‘]. Как я могу объединить все это вместе в pandas, чтобы заменить все другие специальные символы, цифры и т.д. с пустыми строками ''
?
Я предполагаю, что это что-то вроде: df['column1'].replace(to_replace = r'[^a-zA-Z]', value = '', regex = True, inplace = True)
но я новичок в регулярных выражениях и не уверен, как включить другие символы, такие как апострофы.
Пример, который я хотел бы очистить:
source = 'i believe that's a dog. isn't it?
desired_result = 'i believe that's a dog isn't it
Спасибо.
Комментарии:
1. Вы можете просто включить символы внутри [ ] вместе с a-zA-Z.
2. @rootkonda Мне не нужно указывать какие-либо специальные флаги для # of вхождений или чего-либо еще? Я просто хочу заменить все, что не является символами или апостроф. Так
r'[a-zA-Z']'
должно сработать? Или еще лучшеr"[a-zA-Z']"
Ответ №1:
Вам следует попробовать следующее решение.
import re
line = "i believe that's a dog. isn't it?"
line = re.sub(r"[^a-zA-Zs']", "", line)
print(line)
Результат:
i believe that's a dog isn't it
С Pandas
import pandas as pd
df = pd.DataFrame(["i believe that's a dog. isn't it?","'test' string"], columns=['P'])
print(df)
#Solution1:
#df['P'] = df['P'].str.replace(r"[^a-zA-Zs']", "")
#Solution2:
df['P'].replace(to_replace=r"[^a-zA-Zs']", value="", regex=True, inplace=True)
print(df)
Комментарии:
1. С
pandas
этого было бы достаточно, правильно?total_df['column'].replace(to_replace = r"[^a-zA-Zs']", value = "", regex = True, inplace = True)
2. Этот подход сохранит внешние одиночные апострофы, такие как
'cat' is here
.3. @Coldchain9 Если мой ответ полезен, пожалуйста, поставьте галочку слева от ответа.
Ответ №2:
Вы также можете использовать extractall
для этого, таким образом, вы можете извлекать только слова и апострофы:
a = df['source'].str.extractall(r'([ w'] )')
df['result'] = a.apply(''.join)
print(df)
source result
0 i believe that's a dog. isn't it? i believe that's a dog isn't it
Комментарии:
1. обратите внимание, что w также соответствует числам