Як замінити текст у стовпці фрейму даних Pandas?


102

У моєму фреймі даних є стовпець, такий:

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

і я хочу замінити ,кому на -тире. Зараз я використовую цей метод, але нічого не змінилось.

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

Хто-небудь може допомогти?

Відповіді:


210

Використовуйте векторизований 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 або регулярний вираз: 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

тут ми отримуємо точну відповідність у другому рядку і відбувається заміна.


39

Для всіх, хто прибуває сюди з пошуку 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

Якщо вам потрібно замінити символи лише в одному конкретному стовпці, якимось чином регулярне вираження = True і на місці = True все не вдалося, я думаю, що цей спосіб спрацює:

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

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

Єдине, що вам потрібно зробити, це змінити "ім'я_столбця", "символи_потрібно_замінити" та "нові_символи".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.