Как заменить текст в столбце фрейма данных Pandas?

103

У меня есть столбец в моем фрейме данных:

range
"(2,30)"
"(50,290)"
"(400,1000)"
... 

и я хочу заменить ,запятую -тире. Сейчас я использую этот метод, но ничего не изменилось.

org_info_exc['range'].replace(',', '-', inplace=True)

Кто-нибудь может помочь?

UserYmY
источник

Ответы:

214

Используйте векторизованный strметод replace:

In [30]:

df['range'] = df['range'].str.replace(',','-')
df
Out[30]:
      range
0    (2-30)
1  (50-290)

РЕДАКТИРОВАТЬ

Итак, если мы посмотрим, что вы пробовали и почему это не сработало:

df['range'].replace(',','-',inplace=True)

из документации мы видим это описание:

str или regex: str: строка, точно соответствующая to_replace, будет заменена значением

Так как значения str не совпадают, замены не происходит, сравните со следующим:

In [43]:

df = pd.DataFrame({'range':['(2,30)',',']})
df['range'].replace(',','-', inplace=True)
df['range']
Out[43]:
0    (2,30)
1         -
Name: range, dtype: object

здесь мы получаем точное совпадение во второй строке и происходит замена.

EdChum
источник
40

Для всех, кто прибыл сюда из поиска Google о том, как выполнить замену строки во всех столбцах (например, если у одного есть несколько столбцов, таких как столбец «диапазон» OP): Pandas имеет встроенный replaceметод, доступный для объекта фрейма данных.

df.replace(',', '-', regex=True)

Источник: Документы.

кевцизм
источник
2

Замените все запятые на подчеркивание в именах столбцов.

data.columns= data.columns.str.replace(' ','_',regex=True)
Рамиз Ахмад
источник
2

Кроме того, для тех, кто хочет заменить более одного символа в столбце, вы можете сделать это с помощью регулярных выражений:

import re
chars_to_remove = ['.', '-', '(', ')', '']
regular_expression = '[' + re.escape (''. join (chars_to_remove)) + ']'

df['string_col'].str.replace(regular_expression, '', regex=True)
Карлос Дутра
источник
0

Если вам нужно заменить символы только в одном конкретном столбце, каким-то образом regex = True и in place = True все не удалось, я думаю, что этот способ будет работать:

data["column_name"] = data["column_name"].apply(lambda x: x.replace("characters_need_to_replace", "new_characters"))

лямбда больше похожа на функцию, которая в этом сценарии работает как цикл for. x здесь представляет каждую запись в текущем столбце.

Единственное, что вам нужно сделать, это изменить "column_name", "characters_need_to_replace" и "new_characters".

Нэнси К.
источник