У меня есть серия результатов игры в гольф Pandas с несколькими заменами подстрок, которые я хотел бы сделать одновременно:
Я полагаю, что в словаре это будет выглядеть так:
reps = {'+' : '', 'E' : '0'}
Я пробовал pandas.Series.str.replace, но, похоже, принимает только один аргумент. На данный момент я сделал следующее:
series = series.str.replace('+', '')
series = series.str.replace('E', '0')
Это работает, но это явно плохая форма. Как сделать это одной строкой с любым количеством правок?






Петли здесь должно быть достаточно
for key,value in reps.items():
series = series.str.replace(key,value)
Пусть а будет вашей серией
a.map(lambda x: x.translate(str.maketrans('+E',' 0')))
Это удобно, потому что она останется единственной строкой независимо от количества замен, которые необходимо сделать.
Потенциально излишний, но вы также можете сделать это так:
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
за исключением того, что это заменяет
+пробелом, а не пустой строкой, как того требует OP. Вы можетеprint(a.map(lambda x: x.translate(str.maketrans('+E',' 0'))).values)проверить