对数据帧列使用 while 循环时出现 AttributeError

AttributeError when using while loop for dataframes columns

我试图解决一个关于删除数据框的最后一列直到满足特定列长度标准的问题,所以我尝试在将其应用于实际问题之前处理一个非常基本的示例,但我遇到了这个问题错误我不太确定解决:

import pandas as pd
import numpy as np
a = {'ear':[1,3,32,2],'aear':[53,4,3,22],'was':[23,3,2,4]}
df = pd.DataFrame(a)
print(df.columns)
print(len(df.columns))
while len(df.columns) > 1: 
    df = df.drop(df.columns[len(df.columns)-1], axis=1, inplace=True)
print(df)

输出:

was
3
Traceback (most recent call last):
  File "C:\Users\Celius.Stingher\Desktop\PYTHON\soo.py", line 7, in <module>
    while len(df.columns) > 1:
AttributeError: 'NoneType' object has no attribute 'columns'

谁能解释一下问题的根源,因为 len(df.columns) 确实导致了 3,但是在 while 循环中使用它会产生错误。非常感谢

因为一旦你删除所有列 - 数据框也变成 None :) 在你的代码之后,print(df)(最后一行)之前:

>>> df
>>> type(df)
<class 'NoneType'>

这是因为您使用了inplace=True。 如果您使用 inplace=Truedrop returns None 并再次将其分配给 df 变量。

所以下面的代码应该做,你想要什么:

import pandas as pd
import numpy as np
a = {'ear':[1,3,32,2],'aear':[53,4,3,22],'was':[23,3,2,4]}
df = pd.DataFrame(a)
print(df.columns)
print(len(df.columns))
while len(df.columns) > 1: 
    df.drop(df.columns[len(df.columns)-1], axis=1, inplace=True)
print(df)