Python TypeError:一元数~:'的操作数类型错误;浮动';而groupby和apply函数

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

我在使用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_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)]