#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.