'Pandas: Fast way to get cols/rows containing na

In Pandas we can drop cols/rows by .dropna(how = ..., axis = ...) but is there a way to get an array-like of True/False indicators for each col/row, which would indicate whether a col/row contains na according to how and axis arguments?

I.e. is there a way to convert .dropna(how = ..., axis = ...) to a method, which would instead of actual removal just tell us, which cols/rows would be removed if we called .dropna(...) with specific how and axis.

Thank you for your time!



Solution 1:[1]

You can use isna() to replicate the behaviour of dropna without actually removing data. To mimic the 'how' and 'axis' parameter, you can add any() or all() and set the axis accordingly.

Here is a simple example:

import pandas as pd

df = pd.DataFrame([[pd.NA, pd.NA, 1], [pd.NA, pd.NA, pd.NA]])
df.isna()

Output:

    0   1   2
0   True    True    False
1   True    True    True

Eq. to dropna(how='any', axis=0)

df.isna().any(axis=0)

Output:

0    True
1    True
2    True
dtype: bool

Eq. to dropna(how='any', axis=1)

df.isna().any(axis=1)

Output:

0    True
1    True
dtype: bool

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 KarelZe