【问题标题】:pandas replace multiple values one column熊猫在一列中替换多个值
【发布时间】:2014-04-01 17:57:51
【问题描述】:

在风险级别列中,我想将 Small 替换为 1,将 Medium 替换为 5,将 High 替换为 15。 我试过了:

dfm.replace({'risk':{'Small': '1'}},
            {'risk':{'Medium': '5'}},
            {'risk':{'High': '15'}})

但只更换了介质。 怎么了?

【问题讨论】:

    标签: python pandas replace


    【解决方案1】:

    您的替换格式已关闭

    In [21]: df = pd.DataFrame({'a':['Small', 'Medium', 'High']})
    
    In [22]: df
    Out[22]: 
            a
    0   Small
    1  Medium
    2    High
    
    [3 rows x 1 columns]
    
    In [23]: df.replace({'a' : { 'Medium' : 2, 'Small' : 1, 'High' : 3 }})
    Out[23]: 
       a
    0  1
    1  2
    2  3
    
    [3 rows x 1 columns]
    

    【讨论】:

    • 我不确定replace 格式行出了什么问题,所以我建议改用map。 +1 用于发现 OP 错误
    【解决方案2】:
    In [123]: import pandas as pd                                                                                                                                
    
    In [124]: state_df = pd.DataFrame({'state':['Small', 'Medium', 'High', 'Small', 'High']})                                                                    
    
    In [125]: state_df
    Out[125]: 
        state
    0   Small
    1  Medium
    2    High
    3   Small
    4    High
    
    In [126]: replace_values = {'Small' : 1, 'Medium' : 2, 'High' : 3 }                                                                                          
    
    In [127]: state_df = state_df.replace({"state": replace_values})                                                                                             
    
    In [128]: state_df
    Out[128]: 
       state
    0      1
    1      2
    2      3
    3      1
    4      3
    

    【讨论】:

      【解决方案3】:

      你可以定义一个字典并调用map

      In [256]:
      
      df = pd.DataFrame({'a':['Small', 'Medium', 'High']})
      df
      Out[256]:
              a
      0   Small
      1  Medium
      2    High
      
      [3 rows x 1 columns]
      In [258]:
      
      vals_to_replace = {'Small':'1', 'Medium':'5', 'High':'15'}
      df['a'] = df['a'].map(vals_to_replace)
      df
      Out[258]:
          a
      0   1
      1   5
      2  15
      
      [3 rows x 1 columns]
      
      
      In [279]:
      
      val1 = [1,5,15]
      df['risk'].update(pd.Series(val1))
      df
      Out[279]:
        risk
      0    1
      1    5
      2   15
      
      [3 rows x 1 columns]
      

      【讨论】:

      • @Jeff 不熟悉那个方法,我用对了吗?
      • 是的,这是正确的(但我意识到问题是 OP 替换格式错误)
      【解决方案4】:

      看起来 OP 可能一直在寻找一个单行代码来通过连续调用 .str.replace 来解决这个问题:

      dfm.column = dfm.column.str.replace('Small', '1') \
          .str.replace('Medium', '5') \
              .str.replace('High', '15')
      

      OP,您很接近,但只需将逗号替换为 .str.replace,并且不需要字典格式的列调用 ('risk')。只需将要匹配的模式和替换值作为参数传递给替换。

      【讨论】:

      • 欢迎来到 Stack Overflow。请问您能否为您的答案添加一些解释? (您做了哪些更改,为什么?为什么 OP 的原始代码不起作用?)如果没有解释,答案对未来的访问者就没那么有用了。
      • 这个答案增加了其他答案所缺乏的什么?
      • 如果你想替换一段字符串而不是整个字符串,这个答案很有用。当我试图了解是否可以将多个 .str.replace 放在一个语句中时,我找到了这个答案。也就是说,如果需要匹配整个字符串(OP 问题),而不是字符串的一部分,则首选答案是最好的。
      【解决方案5】:

      我必须打开“正则表达式”标志才能使其工作:

       df.replace({'a' : {'Medium':2, 'Small':1, 'High':3 }}, regex=True)
      

      【讨论】:

        【解决方案6】:

        字符串替换每个字符串(小、中、高)为新字符串 (1,5,15)\

        如果 dfm 是数据框名,则 column 是列名。

        dfm.column = dfm.column.str.replace('Small', '1')
        dfm.column = dfm.column.str.replace('Medium', '5')
        dfm.column = dfm.column.str.replace('High', '15')
        

        【讨论】:

          猜你喜欢
          • 2023-02-25
          • 2018-11-04
          • 1970-01-01
          • 1970-01-01
          • 2017-11-30
          • 1970-01-01
          • 2019-02-05
          • 1970-01-01
          • 2022-12-23
          相关资源
          最近更新 更多