代码之家  ›  专栏  ›  技术社区  ›  madhavi

如何使用python替换pandas数据帧值

  •  0
  • madhavi  · 技术社区  · 3 年前

    这是我的旧代码,它在pandas的旧版本中工作得很好,现在它在panda的最新版本中不工作了。

    
        import pandas as pd
        
        df = pd.DataFrame ([{"Type":"R_NEW","Status":"CHANGE","Email":"gra.com"},{"Type":"R_Change"," Status":"WAIT","Email":"rog.com"},{"Type":"Preorder","Status":"WAIT","Email":"dgrse.com"}])
        
        df.replace(to_replace={"R_New":"New","R_Change":"Change","R_DELETE":"Delete","Preorder":"Preorder"},value=None,inplace=True,regex=True)
        
        print(df)
        ```
            
        
        Expected output:
                 
               Type  Status      Email  
        0     NEW  CHANGE    gra.com    
        1  Change     NaN    rog.com    
        2  Preorder    WAIT  dgrse.com    
            
          But I am getting:
               Type  Status      Email  
        0     R_NEW  CHANGE    gra.com    
        1  R_Change     NaN    rog.com   
        2  Preorder    WAIT  dgrse.com   
    
     
    
    How do I fix this?
    
    0 回复  |  直到 3 年前
        1
  •  0
  •   Andrej Kesely    3 年前

    如果我理解正确的话,你想更改索引,而不是列 order :

    df.index = df.index.str.replace("R_", "").str.capitalize()
    print(df)
    

    打印:

             order
    Preorder     4
    Change       2
    Delete       3
    New          1
    

    最初的 df :

    df = pd.DataFrame(
        {"order": {"R_New": "1", "R_Change": "2", "R_DELETE": "3", "Preorder": "4"}}
    )
    
             order
    Preorder     4
    R_Change     2
    R_DELETE     3
    R_New        1
    
        2
  •  0
  •   Amira Bedhiafi    3 年前

    替换函数用于替换值,而不是索引。在代码中,您试图更改DataFrame的索引,而不是值。这就是混乱的根源。

    import pandas as pd
    
    # Create DataFrame
    df = pd.DataFrame({
        "order": {
            "R_New": "1",
            "R_Change": "2",
            "R_DELETE": "3",
            "Preorder": "4"
        }
    })
    
    # Rename index
    df = df.rename(index={
        "R_New": "New",
        "R_Change": "Change",
        "R_DELETE": "Delete",
        "Preorder": "Preorder"
    })
    
    print(df)