#python-3.x #pandas #str-replace
#python-3.x #pandas #str-заменить
Вопрос:
Учитывая небольшой набор данных следующим образом:
df = pd.DataFrame({'text':[' a..b?!??', '%hghamp;12','abc123(bj)!!!', '$$$1234(gz)']})
df
Out:
text
0 a..b?!??
1 %hghamp;12
2 abc123(bj)!!!
3 $$$1234(gz)
Мне нужно удалить пробелы, знаки препинания с левой и правой сторон text
столбца, кроме английских и китайских круглых скобок.
Ожидаемый результат:
text
0 a..b
1 hghamp;12
2 abc123(bj)
3 1234(gz)
Как я мог это сделать в Python?
Мой код:
df['text'] = df['text'].str.replace('[^ws]','')
Out:
0 ab
1 hgh12
2 abc123bj
3 1234gz
Name: text, dtype: object
Спасибо.
Ответ №1:
Я думаю, вам нужно Series.str.strip
со всеми значениями из string.punctuation
без круглых скобок, а также добавляется
:
df['text'] = df['text'].str.strip('!"#$%amp;* ,-./:;<=>?@[]^_`{|}~ ' "'")
print (df)
text
0 a..b
1 hghamp;12
2 abc123(bj)
3 1234(gz)
Динамическое решение должно быть:
import string
rem = ['(',')']
add = [' ']
a = set(list(string.punctuation) add) - set(rem)
df['text'] = df['text'].str.strip(''.join(a))
Комментарии:
1. Спасибо, нужно ли перечислять все возможные знаки препинания?
2. @ahbon — существует проблема, требующая удаления
()
и добавления' '
, поэтому это является причиной для настройкиpunctuation
, добавлено""
'
значение для выбора, оно используется для начала и конца строки для первой длинной строки3. Адаптируется ли ваше динамическое решение к китайским знакам препинания?
4. @ahbon — Я надеюсь, что так, добавьте значения для добавления и удаления в списки
add
иrem
. Я думаю, что китайские значения отсутствуютstring.punctuation
, поэтому, если нужно удалить их, добавьте значения в списокadd
Ответ №2:
Используйте функцию «strip». Небольшой пример ниже
df['text'] = df['text'].apply(lambda x: x.strip())
Комментарии:
1. да, я не внимательно прочитал вопрос — ваш ответ все равно решает его, так что все хорошо