Заменить сразу несколько подстрок серии Pandas

У меня есть серия результатов игры в гольф Pandas с несколькими заменами подстрок, которые я хотел бы сделать одновременно:

  1. Замените '+' на '' (т.е. ничего)
  2. Заменить "E" на "0"

Я полагаю, что в словаре это будет выглядеть так:

reps = {'+' : '', 'E' : '0'}

Я пробовал pandas.Series.str.replace, но, похоже, принимает только один аргумент. На данный момент я сделал следующее:

series = series.str.replace('+', '')
series = series.str.replace('E', '0')

Это работает, но это явно плохая форма. Как сделать это одной строкой с любым количеством правок?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
4
0
1 986
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Петли здесь должно быть достаточно

for key,value in reps.items():
    series = series.str.replace(key,value)

Пусть а будет вашей серией

a.map(lambda x: x.translate(str.maketrans('+E',' 0')))

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

за исключением того, что это заменяет + пробелом, а не пустой строкой, как того требует OP. Вы можете print(a.map(lambda x: x.translate(str.maketrans('+E',' 0'))).values) проверить

pault 10.08.2018 00:30

Потенциально излишний, но вы также можете сделать это так:

def replace_substr(your_string, for_removal):
    for old, new in for_removal.items():
        x =  your_string.replace(old, new)
    return x 

df['series'] = df['series'].apply(lambda x: replace_substr(x, reps))
Ответ принят как подходящий

Если вы используете python3 (это не будет работать в python2), вы можете использовать pandas.Series.str.translate следующим образом:

import pandas as pd
reps = {'+' : '', 'E' : '0'}
series = pd.Series(['+1', 'E', '+5', '-1'])

print(series)
#0    +1
#1     E
#2    +5
#3    -1
#dtype: object

print(series.str.translate(str.maketrans(reps)))
#0     1
#1     0
#2     5
#3    -1
#dtype: object

Лучший способ убедиться, что он делает то, что вы ожидаете:

print(series.str.translate(str.maketrans(reps)).values)
#array(['1', '0', '5', '-1'], dtype=object)

Как заменить спецмарку

series.replace({'[+]': '', 'E': '0'},regex=True)
Out[778]: 
0     1
1     0
2     5
3    -1
dtype: object

Другие вопросы по теме