Jak zamienić tekst w kolumnie ramki danych Pandas?

103

Mam taką kolumnę w mojej ramce danych:

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

i chcę zamienić ,przecinek na -myślnik. Obecnie używam tej metody, ale nic się nie zmienia.

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

Czy ktoś może pomóc?

UżytkownikRRR
źródło

Odpowiedzi:

214

Użyj strmetody zwektoryzowanej replace:

In [30]:

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

EDYTOWAĆ

Jeśli więc przyjrzymy się temu, czego próbowałeś i dlaczego to nie zadziałało:

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

z dokumentów, które widzimy w tym opisie:

str lub regex: str: ciąg dokładnie pasujący do to_replace zostanie zastąpiony wartością

Dlatego, ponieważ wartości str nie są zgodne, nie następuje żadna zamiana, porównaj z poniższymi:

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

tutaj otrzymujemy dokładne dopasowanie w drugim rzędzie i następuje zamiana.

EdChum
źródło
40

Dla każdego, kto przybywa tutaj z wyszukiwarki Google, jak dokonać zamiany ciągu we wszystkich kolumnach (na przykład, jeśli jedna ma wiele kolumn, takich jak kolumna „zakres” OP): Pandas ma wbudowaną replacemetodę dostępną w obiekcie dataframe.

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

Źródło: Docs

kevcisme
źródło
2

Zastąp wszystkie przecinki podkreśleniem w nazwach kolumn

data.columns= data.columns.str.replace(' ','_',regex=True)
Rameez Ahmad
źródło
2

Ponadto osoby, które chcą zamienić więcej niż jeden znak w kolumnie, mogą to zrobić za pomocą wyrażeń regularnych:

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

df['string_col'].str.replace(regular_expression, '', regex=True)
Carlos Dutra
źródło
0

Jeśli potrzebujesz tylko zamienić znaki w jednej określonej kolumnie, w jakiś sposób regex = True i in place = True, wszystko nie powiodło się, myślę, że ten sposób zadziała:

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

lambda bardziej przypomina funkcję, która w tym scenariuszu działa jak pętla for. x reprezentuje tutaj każdy z wpisów w bieżącej kolumnie.

Jedyne, co musisz zrobić, to zmienić „nazwa_kolumny”, „znaki_need_do_ zastąpienia” i „nowe_znaki”.

Nancy K.
źródło