Skip to main content

About this free course

Download this course

Share this free course

Learn to code for data analysis
Learn to code for data analysis

Start this free course now. Just create an account and sign in. Enrol and complete the course for a free statement of participation or digital badge if available.

1.6 Bitwise operators

To build more complicated expressions involving column comparisons, there are two bitwise operators.

An image of someone constructing a building from wooden blocks
Figure 7

The & operator means ‘and’ and the | operator (vertical bar, not uppercase letter ‘i’) means ‘or’. So, for example the expression:

(df['Country'] >= 'Latvia') & (df['Country'] <= 'Sweden')

will evaluate to a series containing Boolean values where the values areTrue only if the equivalent rows in the dataframe contain the countries ‘Latvia’ to ‘Sweden’, inclusive. However, the following expression which uses | (or) rather than & (and):

(df['Country'] >= 'Latvia') | (df['Country'] <= 'Sweden')

will evaluate to True for all countries, because every country comes alphabetically after ‘Latvia’ (e.g. the ‘UK’) or before 'Sweden' (e.g. ‘Brazil’).

Note the round brackets around each comparison. Without them you will get an error.

The whole expression with multiple comparisons has to be put within df[…] to get a dataframe with only those rows that match the condition.

As a further example, using different columns, it is relatively easy to find the rows in df where 'Population (1000s)' is greater than 80000 and where 'TB deaths' are greater than 10000.

In []:

df[(df['Population (1000s)'] > 80000) & (df['TB deaths'] > 10000)]

Out []:

 CountryPopulation (1000s)TB deaths
13Bangladesh15659580000
36China139333741000
58Ethiopia9410130000
77India1252140240000
78Indonesia24986664000
124Nigeria173615160000
128Pakistan18214349000
134Philippines9839427000
141Russian Federation14283417000
190Viet Nam9168017000

These expressions can get long and complicated, making it easy to miss a crucial round or square bracket. In those cases it is best to break up the expression into small steps. The previous example could also be written as:

In []:

population = df['Population (1000s)']

deaths = df['TB deaths']

df[(population > 80000) & (deaths > 10000)]

Exercise 3 Bitwise operators

Complete Exercise 3 in the Exercise notebook 2.