Python TypeError:一元数~:'的操作数类型错误;浮动';而groupby和apply函数
我在使用groupby和函数删除异常值时遇到一个TypeError:Python TypeError:一元数~:'的操作数类型错误;浮动';而groupby和apply函数,python,pandas,numpy,Python,Pandas,Numpy,我在使用groupby和函数删除异常值时遇到一个TypeError: def is_outlier(s): lower_limit = s.median() - (s.std() * 3) upper_limit = s.median() + (s.std() * 3) return ~s.between(lower_limit, upper_limit) df1 = df[~df.groupby('objectName')['price'].apply(is_outli
def is_outlier(s):
lower_limit = s.median() - (s.std() * 3)
upper_limit = s.median() + (s.std() * 3)
return ~s.between(lower_limit, upper_limit)
df1 = df[~df.groupby('objectName')['price'].apply(is_outlier)]
print(df1)
我已经用:df=df[np.isfinite(df['price'])]]
过滤了price
列中的NaN行,我应该怎么做才能使它正确返回?提前谢谢你的帮助
File "C:\Users\User\Anaconda3\lib\site-packages\pandas\core\generic.py", line 1143, in __invert__
arr = operator.inv(com._values_from_object(self))
TypeError: bad operand type for unary ~: 'float'
这就是我从df['price']中得到的。descripe(),看起来很正常
count 10755.000000
mean 7.135314
std 3.844756
min 1.000000
25% 4.700000
50% 6.000000
75% 8.500000
max 49.000000
相关参考文献:
我认为
std
返回NaN
s对于长度1
的组,所以使用fillna
:
def is_outlier(s):
lower_limit = s.median() - (s.std() * 3)
upper_limit = s.median() + (s.std() * 3)
return s.between(lower_limit, upper_limit)
df1 = df[~df.groupby('objectName')['price'].apply(is_outlier).fillna(True)]