一次替换Pandas系列的多个子字符串

时间:2018-08-09 22:15:22

标签: python string pandas replace series

我有一个Pandas系列高尔夫球成绩,想同时替换多个子串:

  1. 将``+''替换为``(什么都不是)
  2. 将“ E”替换为“ 0”

在字典中,我想这看起来像:

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

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

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

这有效,但显然形式不佳。如何在一行中进行任意数量的编辑?

5 个答案:

答案 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