【问题标题】:Replace multiple substrings of Pandas Series at once一次替换 Pandas Series 的多个子串
【发布时间】:2019-01-17 11:25:23
【问题描述】:

我有一个 Pandas 系列高尔夫分数,我想同时制作多个子字符串替换:

  1. 将 '+' 替换为 ''(即什么都没有)
  2. 将“E”替换为“0”

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

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

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

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

这可行,但显然是糟糕的形式。如何在一行中进行任意数量的编辑?

【问题讨论】:

    标签: python string pandas replace series


    【解决方案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】:

      这里一个循环就足够了

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

      【讨论】:

        【解决方案3】:

        一个成为你的系列

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

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

        【讨论】:

        • 除了这会将+ 替换为空格,而不是 OP 要求的空字符串。您可以print(a.map(lambda x: x.translate(str.maketrans('+E',' 0'))).values)进行验证
        【解决方案4】:

        可能有点矫枉过正,但你也可以这样做:

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

        【讨论】:

          【解决方案5】:

          如何替换特殊标记

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

          【讨论】:

            猜你喜欢
            • 2011-12-01
            • 2016-12-03
            • 2011-07-01
            • 2018-08-30
            • 2020-01-09
            • 2014-12-23
            • 1970-01-01
            相关资源
            最近更新 更多