Фильтрация+анализ данных

Задача: Отфильтруйте все строительные объекты, кроме тех, что на этапе строительства «Котлован» и на этапе «Заморожено». Сколько их в датасете?

Решение:

filter = ~(dataset[['Этап строительства']=='Котлован' & dataset['Этап строительства']=='Заморожено'].isin(districts))
filtered_dataset = dataset[filter]
filtered_dataset.head()

Строка пишет ошибку:

TypeError                                 Traceback (most recent call last)
/usr/local/lib/python3.7/dist-packages/pandas/core/ops/array_ops.py in na_logical_op(x, y, op)
301         #  (xint or xbool) and (yint or bool)
\--\> 302         result = op(x, y)
303     except TypeError:

9 frames
TypeError: unsupported operand type(s) for &: 'str' and 'float'

During handling of the above exception, another exception occurred:

TypeError                                 Traceback (most recent call last)
TypeError: unsupported operand type(s) for &: 'bool' and 'str'

The above exception was the direct cause of the following exception:

TypeError                                 Traceback (most recent call last)
/usr/local/lib/python3.7/dist-packages/pandas/core/ops/array_ops.py in na_logical_op(x, y, op)
326                     f"Cannot perform '{op.__name__}' with a dtyped \[{x.dtype}\] array "
327                     f"and scalar of type \[{typ}\]"
\--\> 328                 ) from err
329
330     return result.reshape(x.shape)

TypeError: Cannot perform 'rand\_' with a dtyped \[object\] array and scalar of type \[bool\]

Вот только не пойму, видимо где-то синтаксис не так завернул. Или что-то еще не так ?


Ответы (2 шт):

Автор решения: strawdog

Много лишнего, в решении, и неоптимальная логика. Попробуйте так:

filtered_dataset = dataset[~dataset['Этап строительства'].isin(['Котлован', 'Заморожено'])] 
→ Ссылка
Автор решения: SouStan

Верное решение моего вопроса:

filter = ~dataset['Этап строительства'].isin(['Котлован', 'Заморожено'])
filtered_dataset = dataset[filter]
filtered_dataset
→ Ссылка