一次性替换Pandas Series中的多个子字符串

4

我有一个Pandas系列的高尔夫成绩,需要同时进行多个子字符串替换:

  1. 将“+”替换为“”(即什么也不替换)
  2. 将“E”替换为“0”

在字典中,我想这会是这样的:

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

我尝试过pandas.Series.str.replace,但它似乎只接受一个参数。到目前为止,我所做的是:

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

这样做是可行的,但显然不够规范。如何用一行代码实现,并且可以进行任意次编辑?
5个回答

5
如果您正在使用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
这里只需要一个循环就足够了。
for key,value in reps.items():
    series = series.str.replace(key,value)

1
如何替换特殊符号

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

0

a成为你的序列

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

这很方便,因为它将保持单行,无论要进行多少次替换。


1
除此之外,这将把 + 替换为一个空格,而不是请求者 OP 要求的空字符串。您可以使用 print(a.map(lambda x: x.translate(str.maketrans('+E',' 0'))).values) 进行验证。 - pault

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))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接