Замена и удаление текста в столбце

#python #pandas

#python #панды

Вопрос:

Я хотел бы:

  1. удалите слова «ANOS» и «ANO»;
  2. заменить «A» на «TO»; и
  3. замените «<1ano» на «от 0 до 1».

Пример: от «10 до 19 ANOS» до «от 10 до 19»

 data = pd.DataFrame({'FAIXA_ETARIA': ['10 A 19 ANOS',' 20 A 29 ANOS', '30 A 39 ANOS', '40 A 49 ANOS',
                                    '50 A 59 ANOS', ' 60 A 69 ANOS', '70 A 79 ANOS', '80 A 89 ANOS',
                                      '<1ANO'],
                     'Count': [3, 8, 28, 7, 15, 9, 3, 5, 3]})
 

PS: В моей базе данных представлено много столбцов, я бы хотел, чтобы эта процедура выполнялась только в столбце «FAIXA_ETARIA»

Спасибо за вашу помощь!

Комментарии:

1. Имеет ли смысл мой ответ? Я использую регулярные выражения для гибкости. Если хотите, проверьте, https://regex101.com/ чтобы попрактиковаться. Я думаю, что есть доступная реализация Python (в левой части окна в разделе «ВКУС»).

2. @MarkMoretto ваш код работает! Спасибо за помощь и ссылку, мне нужно это исправить

Ответ №1:

вот один из возможных способов:

 data["FAIXA_ETARIA"] 
    .str.replace(r"ANOw?", "")  # Regex for ANO plus an optional single character
    .str.replace(r"A", "TO")  # Replace a single character
    .str.replace(r"<w?", "0 to 1") # Regex for < and non-greedy multiple characters.
 

Вывод:

 0     10 TO 19 
1     20 TO 29 
2     30 TO 39 
3     40 TO 49 
4     50 TO 59 
5     60 TO 69 
6     70 TO 79 
7     80 TO 89 
8        0 to 1
Name: FAIXA_ETARIA, dtype: object
 

Ответ №2:

Вы могли бы перебрать все элементы в вашем массиве, а затем использовать replace() метод python. Пример:

 message = "Hello there"
custom = message.replace("there", "kvratto")
 

Результатом будет «Привет, кватто».

В вашем случае у вас есть словарь. Таким образом, вы можете получить конкретные записи с dictionaryname['columnname'] помощью . Вы можете поместить результат в новую переменную, а затем обрабатывать его как массив.

Я надеюсь, что этого достаточно!

Комментарии:

1. Спасибо за вашу помощь, @MarkMoretto и @LinusDehner!

Ответ №3:

Или просто извлеките цифру и соедините с помощью «to».:

 data['FAIXA_ETARIA'] = data['FAIXA_ETARIA'].str.findall('d ').str.join(' to ')
cond = data['FAIXA_ETARIA']  == '1'
data.loc[cond, 'FAIXA_ETARIA'] = '0 to 1'
 
 0    10 to 19
1    20 to 29
2    30 to 39
3    40 to 49
4    50 to 59
5    60 to 69
6    70 to 79
7    80 to 89
8      0 to 1
Name: FAIXA_ETARIA, dtype: object