Skip to content
Home » Subsetting a Pandas DataFrame on multiple conditions, Part 2: Parentheses

Subsetting a Pandas DataFrame on multiple conditions, Part 2: Parentheses

This blog post is the second post in a two-part series on subsetting Pandas DataFrame rows using chained conditions. In this post, we tackle the following TypeError.

TypeError: cannot compare a dtyped [object] array with a scalar of type [bool]


Filtering (or subsetting) a DataFrame can easily be done using the loc property, which can access a group of rows and columns by label(s) or a boolean array. To filter rows, one can also drop loc completely, and implicitly call it by putting the conditioning booleans between square brackets.

💥 Watch out, if your conditions are a list of strings, it will filter the columns.

# explicit row and column filter using loc
df.loc[row_condition, column_condition]

# implicit row filter by passing a list of booleans
condition = [True, False, True]
df[condition] # will filter rows

# implicit column filter by passing a list of booleans
condition = ['column_a', 'column_b']
df[condition] # will filter columns

By chaining conditions, you can filter on multiple conditions, all at once. Nevertheless, make sure to use proper parentheses.

First, let’s try not using parentheses around our conditions, as can be seen in the chunk below.

df.loc[df.column_a == 'some_value' & df.column_b == 'another_value']

The error you’ll run into is the following:

TypeError: cannot compare a dtyped [object] array with a scalar of type [bool]

This happens because & has higher precedence than ==. Here’s what the Pandas documentation has to say about it.

Another common operation is the use of boolean vectors to filter the data. The operators are: | for or, & for and, and ~ for not. These must be grouped by using parentheses, since by default Python will evaluate an expression such as df[‘A’] > 2 & df[‘B’] < 3 as df[‘A’] > (2 & df[‘B’]) < 3, while the desired evaluation order is (df[‘A’] > 2) & (df[‘B’] < 3).

The correct way to combine multiple conditions (whether it’s an and or an or), is by adding the necessary parentheses, as follows.

df.loc[(df.column_a == 'some_value') & (df.column_b == 'another_value')]

This will make sure that == is processed before & and that no errors are thrown.

As you can see, I’m using the bitwise operator, and not the boolean operator. More details can be found in part 1 of this post.

Say thanks, ask questions or give feedback

Technologies get updated, syntax changes and honestly… I make mistakes too. If something is incorrect, incomplete or doesn’t work, let me know in the comments below and help thousands of visitors.

16 thoughts on “Subsetting a Pandas DataFrame on multiple conditions, Part 2: Parentheses”

  1. Полностью трендовые события модного мира.
    Актуальные события самых влиятельных подуимов.
    Модные дома, торговые марки, гедонизм.
    Самое приятное место для модных людей.
    https://malemoda.ru/

  2. ManModa.ru – это журнал о мужской моде и стиле. Сайт предлагает актуальные тренды, обзоры, советы по выбору одежды и аксессуаров. Также здесь можно найти новости модных показов, информацию о брендах, уходе за собой и другие темы, связанные с мужским стилем. Журнал помогает мужчинам создавать уникальные образы и следить за новинками в мире моды.
    https://manmoda.ru

  3. Наша частная клиника обеспечивает профессиональную медицинскую помощь для всей семьи.
    Мы гарантируем персонализированное лечение всестороннюю диагностику.
    Команда профессионалов в нашей клинике опытные и внимательные врачи, использующие передовые методики.
    В нашей клинике доступны все виды диагностики и лечения, в том числе медицинские услуги по восстановлению здоровья.
    Забота о вашем здоровье — наши главные приоритеты.
    Свяжитесь с нами, и мы поможем вам вернуться к здоровой жизни.
    https://fashion.clinicalkeynote.com/how-to-engender-the-virtually-from-mobile-river-merchandisin-3708165731740586991

  4. 在此页面,您可以联系专门从事一次性的高危工作的专业人士。
    我们提供大量可靠的从业人员供您选择。
    无论需要何种高风险任务,您都可以安全找到理想的帮手。
    如何雇佣刺客
    所有作业人员均经过筛选,保证您的安全。
    网站注重匿名性,让您的任务委托更加无忧。
    如果您需要服务详情,请与我们取得联系!

  5. На этом сайте вы сможете найти подробную информацию о партнерке: 1win partners.
    Доступны все аспекты работы, условия участия и возможные поощрения.
    Каждая категория детально описан, что помогает быстро освоить в аспектах работы.
    Плюс ко всему, имеются вопросы и ответы и полезные советы для первых шагов.
    Информация регулярно обновляется, поэтому вы доверять в актуальности предоставленных данных.
    Данный сайт окажет поддержку в понимании партнёрской программы 1Win.

  6. Прямо здесь доступен мессенджер-бот “Глаз Бога”, что собрать данные по человеку через открытые базы.
    Инструмент функционирует по номеру телефона, обрабатывая публичные материалы в Рунете. С его помощью доступны пять пробивов и глубокий сбор по запросу.
    Платфор ма обновлен согласно последним данным и включает фото и видео. Сервис поможет проверить личность в открытых базах и покажет сведения мгновенно.
    глаз бога поиск по фото
    Такой инструмент — идеальное решение для проверки людей через Telegram.

  7. Этот бот способен найти информацию о любом человеке .
    Достаточно ввести имя, фамилию , чтобы сформировать отчёт.
    Бот сканирует открытые источники и активность в сети .
    глаз бога программа
    Информация обновляется мгновенно с проверкой достоверности .
    Оптимален для анализа профилей перед важными решениями.
    Анонимность и точность данных — наш приоритет .

  8. При выборе семейного врача важно учитывать на его опыт , стиль общения и доступность услуг .
    Убедитесь, что медицинский центр расположена рядом и предоставляет полный спектр услуг .
    Узнайте , принимает ли врач с вашей страховой компанией , и какова загруженность расписания.
    https://mercgg.com/forums/topic/%d0%b3%d0%b4%d0%b5-%d0%b2%d1%8b%d0%b1%d1%80%d0%b0%d1%82%d1%8c-%d1%87%d0%b0%d1%81%d1%82%d0%bd%d1%83%d1%8e-%d0%ba%d0%bb%d0%b8%d0%bd%d0%b8%d0%ba%d1%83-%d0%b2-%d0%bf%d0%be%d0%b4%d0%bc%d0%be%d1%81%d0%ba
    Оценивайте отзывы пациентов , чтобы оценить отношение к клиентам.
    Важно проверить сертификацию врача , аккредитацию клиники для гарантии безопасности .
    Оптимальный вариант — тот, где вас услышат ваши нужды , а общение с персоналом будет комфортным .

  9. Осознанное участие в азартных развлечениях — это комплекс мер , направленный на защиту участников , включая поддержку уязвимых групп.
    Сервисы должны внедрять инструменты контроля, такие как временные блокировки, чтобы избежать чрезмерного участия.
    Регулярная подготовка персонала помогает выявлять признаки зависимости , например, неожиданные изменения поведения .
    вавада казино
    Для игроков доступны консультации экспертов, где обратиться за поддержкой при проблемах с контролем .
    Соблюдение стандартов включает аудит операций для предотвращения мошенничества .
    Задача индустрии создать безопасную среду , где риск минимален с вредом для финансов .

  10. Хотите найти данные о человеке ? Наш сервис поможет детальный отчет в режиме реального времени .
    Воспользуйтесь уникальные алгоритмы для поиска публичных записей в открытых источниках.
    Выясните контактные данные или интересы через автоматизированный скан с гарантией точности .
    найти через глаз бога
    Бот работает с соблюдением GDPR, используя только общедоступную информацию.
    Получите расширенный отчет с историей аккаунтов и списком связей.
    Доверьтесь надежному помощнику для digital-расследований — точность гарантирована!

  11. Хотите найти данные о пользователе? Наш сервис предоставит полный профиль в режиме реального времени .
    Используйте продвинутые инструменты для анализа цифровых следов в соцсетях .
    Выясните контактные данные или активность через автоматизированный скан с гарантией точности .
    настоящий глаз бога
    Система функционирует в рамках закона , обрабатывая общедоступную информацию.
    Закажите расширенный отчет с геолокационными метками и графиками активности .
    Доверьтесь надежному помощнику для digital-расследований — точность гарантирована!

Leave a Reply

Your email address will not be published. Required fields are marked *