Удаление символа из столбца фрейма данных pandas с помощью цикла for

#python #pandas

#python #pandas

Вопрос:

У меня есть DF, в котором есть столбец country, и в некоторых из этих стран есть «(«. Я попытался удалить все это «(» s с помощью этого цикла for:

 for country in df_energy['Country']:
    if ')' in df_energy['Country']:
        df_energy['Country'] = df_energy['Country'].replace({'(':'', ')':''})
  

Но когда я снова печатаю этот DF, я вижу, что все скобки не были удалены. Я был бы рад, если бы кто-нибудь сказал, где я допустил ошибку.

Спасибо.

Ответ №1:

Вам не нужен цикл:

 df_energy['Country'] = df_energy['Country'].str.replace('[()]', '')
  

Если вы хотите заменить только совпадение () , то:

 df_energy['Country'] = df_energy['Country'].str.replace('((.*))', r'1')
  

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

1. Это заменит все вхождения любого из символов в любой комбинации или порядке их нахождения, поскольку .str средства доступа pandas, используемые regex=True по умолчанию, например ')[Aaargh(' , станут 'Aaargh'

2. Он не должен удаляться, [ поскольку регулярное выражение [()] просто совпадает с ( или ) . И, глядя на код, опубликованный OP, похоже, что они пытались удалить все вхождения ( or ) с '' помощью, что это и делает.

3. Вы также можете удалить соответствие () , добавленное в answer.