Python 重命名和删除同一行data.frame中的列时出错

Python 重命名和删除同一行data.frame中的列时出错,python,pandas,Python,Pandas,当我尝试从pandas data.frame重命名和删除列时,我遇到一个错误,错误是说>AttributeError:“NoneType”对象没有属性“drop” 熊猫df.rename.drop.groupby.reset_索引顺序总是让我感到困惑。当我想重塑这个模型时,我应该遵循什么正确的语法 raw_data = {'patient': [1, 1, 1, 2, 2], 'obs': [1, 2, 3, 1, 2], 'treatment': [0, 1,

当我尝试从pandas data.frame重命名和删除列时,我遇到一个错误,错误是说
>AttributeError:“NoneType”对象没有属性“drop”

熊猫df.rename.drop.groupby.reset_索引顺序总是让我感到困惑。当我想重塑这个模型时,我应该遵循什么正确的语法

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:“非类型”对象没有属性“drop”


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

尝试:

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

def rename_drop(df):

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

   return df

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

尝试:

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

def rename_drop(df):

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

   return df

删除这两个
inplace=True
,这是多余的,因为您已经将其分配回
df
。这将起作用:
df=df.rename(columns={'obs':'observation','score':'Dr_score'})。drop(columns='tk')
df=df.rename(columns={'obs':'observation',score':'Dr_score'})。drop('tk',axis=1)
I尽管我应该做
inplace=True
,因为我想更改原始的df,它是多余的,因为您已经将其分配回
df
。这将起作用:
df=df.rename(columns={'obs':'observation','score':'Dr_score'})。drop(columns='tk')
df=df.rename(columns={'obs':'observation',score':'Dr_score'})。drop('tk',axis=1)
我认为我应该做
inplace=True
,因为我想更改原始的dfI,我认为你误读了我的答案。我设置inplace=False,因此它确实返回一个数据帧。事实上,inplace默认为False,因此使我的代码行与您在对OP.Okey的评论中所写的相同,但仍然不正确。。。您在哪里保存数据帧?。。您需要
df=df….
<代码>就地默认为False。我认为
df=df.rename(columns={'obs':'observation','score':'Dr_score'})。drop('tk',axis=1)
是正确的解决方案(和dup)。我想你误读了我的答案。我设置inplace=False,因此它确实返回一个数据帧。事实上,inplace默认为False,因此使我的代码行与您在对OP.Okey的评论中所写的相同,但仍然不正确。。。您在哪里保存数据帧?。。您需要
df=df….
<代码>就地默认为False。我认为
df=df.rename(columns={'obs':'observation','score':'Dr_score'})。drop('tk',axis=1)
是正确的解决方案(和dup)