Skip to main content

Pandas mask()

In this tutorial, we will learn about the mask() method in Pandas with the help of examples.

The mask() method in Pandas is used to replace values where certain conditions are met.

Example

import pandas as pd

# create a DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4],
    'B': [5, 6, 7, 8]
})

# replace values in column 'A' that are greater than 2 with -1 df['A'] = df['A'].mask(df['A'] > 2, -1)
print(df) ''' Output A B 0 1 5 1 2 6 2 -1 7 3 -1 8 '''

mask() Syntax

The syntax of the mask() method in Pandas is:

df.mask(cond, other=nan, inplace=False, axis=None, level=None)

mask() Arguments

The mask() method takes following arguments:

  • cond - condition to check
  • other (optional) - values to replace with where the condition is True
  • inplace (optional) - modifies the caller object directly without creating a new object
  • axis (optional) - which axis to align the other values with, if necessary
  • level (optional) - if the DataFrame has a MultiIndex, this determines which level to align with

mask() Return Value

The mask() method returns a new DataFrame with the same shape as the original, where values specified by the condition are replaced.


Example 1: Replace Values Using mask()

import pandas as pd

df = pd.DataFrame({
    'A': [1, 2, 3, 4],
    'B': [5, 6, 7, 8]
})

# use mask() to replace even values # across the entire DataFrame with 0 df = df.mask(df % 2 == 0, 0)
print(df)

Output

   A  B
0  1  5
1  0  0
2  3  7
3  0  0

In the above example, the mask() method replaces all the even numbers with 0.


Example 2: Customizing Value Replacement With other Argument in mask()

import pandas as pd

df = pd.DataFrame({
    'A': [1, 2, 3, 4],
    'B': [5, 6, 7, 8]
})

# replace values in 'A' greater than 2 with their double df['A'] = df['A'].mask(df['A'] > 2, other=lambda x: x * 2)
print(df)

Output

   A  B
0  1  5
1  2  6
2  6  7
3  8  8

In this example, we have applied the mask() method to the A column of the df DataFrame.

It first checks for values in A that are greater than 2 using df['A'] > 2. For those values that meet this condition, it replaces them with their double.

The doubling is achieved using the other argument, which is set to a lambda function lambda x: x * 2. The lambda function takes each value in the A column and doubles it.


Example 3: Aligning Conditions With axis Argument in mask()

import pandas as pd

df = pd.DataFrame({
    'A': [1, 2, 3, 4],
    'B': [5, 6, 7, 8],
    'C': [9, 10, 11, 12]
})

condition_series = pd.Series([True, False, True, False])

# using mask with a Series condition and axis=0 df.mask(condition_series, -1, axis=0, inplace=True)
print(df)

Output

   A  B   C
0 -1 -1  -1
1  2  6  10
2 -1 -1  -1
3  4  8  12

Here, mask() is applied across rows using the axis=0 argument.

For each row, if the corresponding value in the condition_series is True, all values in that row in the df DataFrame are replaced with -1.

Here, with inplace=True, the original DataFrame df is modified directly, and there's no need to assign the result to a new variable.


Example 4: Applying Conditional Replacements in MultiIndex DataFrame Using mask()

import pandas as pd

# create a MultiIndex DataFrame
arrays = [
    ['A', 'A', 'B', 'B'],
    [1, 2, 1, 2]
]
index = pd.MultiIndex.from_arrays(arrays, names=['letters', 'numbers'])
df = pd.DataFrame({'data': [10, 20, 30, 40]}, index=index)

print("Original DataFrame:")
print(df)
print()

# apply mask to replace values in 'data' column # where the 'numbers' level is 1 with 99 df['data'] = df['data'].mask(df.index.get_level_values('numbers') == 1, 99, level='numbers')
print("DataFrame after mask:") print(df)

Output

Original DataFrame:
                      data
letters  numbers      
A           1          10
            2          20
B           1          30
            2          40

DataFrame after mask:
                  data
letters numbers      
A       1          99
        2          20
B       1          99
        2          40

In this example, we used the MultiIndex Dataframe df and used the mask() method with the level argument to replace the values in the data column where the numbers level is 1 with 99.