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

在同一行pandas data.frame[duplicate]重命名和删除列时出错

  •  0
  • Alexander  · 技术社区  · 6 年前

    当我试图重命名pandas data.frame中的列并从中删除列时,遇到一个错误,我说 >AttributeError: 'NoneType' object has no attribute 'drop' .

    raw_data = {'patient': [1, 1, 1, 2, 2],
            'obs': [1, 2, 3, 1, 2],
            'treatment': [0, 1, 0, 1, 0],
            'score': ['strong', 'weak', 'normal', 'weak', 'strong'],    
            'tr': [1,2,3,4,5],
            'tk': [6,7,8,9,10],
            'ak': [11,12,13,14,15]
    
            }
    
    
    
    df = pd.DataFrame(raw_data, columns = ['patient', 'obs', 'treatment', 'score','tr','tk','ak'])
    
    df
    
       patient  observation  treatment Dr_score  tr  tk  ak
    0        1            1          0   strong   1   6  11
    1        1            2          1     weak   2   7  12
    2        1            3          0   normal   3   8  13
    3        2            1          1     weak   4   9  14
    4        2            2          0   strong   5  10  15
    
    
    
    def rename_drop(df):
    
        df=df.rename(columns = {'obs':'observation', 'score':'Dr_score'},inplace = True).drop('tk',axis=1,inplace=True)
    
        return df
    
    
    rename_drop(df)
    

    AttributeError:“NoneType”对象没有属性“drop”

    1 回复  |  直到 6 年前
        1
  •  2
  •   RubenB    6 年前

    错误在于使用inplace=True(在重命名和删除操作中)。这将返回一个非类型对象,而不是应用drop的预期数据帧。

    尝试:

    df.rename(columns = {'obs':'observation', 'score':'Dr_score'}, inplace = False).drop('tk',axis=1,inplace=False)
    

    编辑:将上述行合并到原始函数中:

    def rename_drop(df):
    
       df = df.rename(columns = {'obs':'observation', 'score':'Dr_score'}, inplace = False).drop('tk',axis=1,inplace=False)
    
       return df