pandas replace multiple values one column

后端 未结 6 1736
被撕碎了的回忆
被撕碎了的回忆 2020-11-30 07:43

In a column risklevels I want to replace Small with 1, Medium with 5 and High with 15. I tried:

dfm.replace({\'risk\':{\'Small\': \'1\'}},{\'risk\':{\'Medium         


        
相关标签:
6条回答
  • 2020-11-30 08:04

    Your replace format is off

    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]
    
    0 讨论(0)
  • 2020-11-30 08:06

    You could define a dict and call 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]
    
    0 讨论(0)
  • 2020-11-30 08:07

    Looks like OP may have been looking for a one-liner to solve this through consecutive calls to '.str.replace:'

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

    OP, you were close but just needed to replace your commas with .str.replace and the column call ('risk') in a dictionary format isn't necessary. Just pass the pattern-to-match and replacement-value as arguments to replace.

    0 讨论(0)
  • 2020-11-30 08:08

    I had to turn on the "regex" flag to make it work:

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

    0 讨论(0)
  • 2020-11-30 08:09

    String replace each string (Small, Medium, High) for the new string (1,5,15)\

    If dfm is the dataframe name, column is the column name.

    dfm.column = dfm.column.str.replace('Small', '1')
    dfm.column = dfm.column.str.replace('Medium', '5')
    dfm.column = dfm.column.str.replace('High', '15')
    
    0 讨论(0)
  • 2020-11-30 08:14
    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
    
    0 讨论(0)
提交回复
热议问题