我有一个Pandas系列高尔夫球成绩,想同时替换多个子串:
在字典中,我想这看起来像:
reps = {'+' : '', 'E' : '0'}
我尝试过pandas.Series.str.replace,但这似乎只接受一个参数。到目前为止,我所做的是:
series = series.str.replace('+', '')
series = series.str.replace('E', '0')
这有效,但显然形式不佳。如何在一行中进行任意数量的编辑?
答案 0 :(得分:2)
这里一个循环就足够了
for key,value in reps.items():
series = series.str.replace(key,value)
答案 1 :(得分:1)
如果您使用的是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)
答案 2 :(得分:0)
让 a 做你的系列
a.map(lambda x: x.translate(str.maketrans('+E',' 0')))
这很方便,因为无论要进行多少次替换,它都将保持为一行。
答案 3 :(得分: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))
答案 4 :(得分:0)
如何替换特殊标记
series.replace({'[+]': '', 'E': '0'},regex=True)
Out[778]:
0 1
1 0
2 5
3 -1
dtype: object