TypeError: неверный тип операнда для унарного ~: 'float' во время группировки и применения функции - PullRequest
0 голосов
/ 18 февраля 2019

Я получаю TypeError при использовании groupby и функцию для удаления выбросов:

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)

Я отфильтровал строки NaN в столбце price с: df = df[np.isfinite(df['price'])], что я должен сделать, чтобы он вернулсяправильно?Спасибо за помощь заранее.

  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'].describe(), кажется вполне нормальным.

count    10755.000000
mean         7.135314
std          3.844756
min          1.000000
25%          4.700000
50%          6.000000
75%          8.500000
max         49.000000

Ссылки, связанные с:

TypeError: неверный тип операнда дляунарный ~: float

TypeError: неверный тип операнда для унарного ~: 'float'

1 Ответ

0 голосов
/ 18 февраля 2019

По моему мнению std return 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)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...