3

I would like to create an isna() clause using the .query() method in Pandas

I am getting an error though.

For a reproducible example:

import pandas as pd
import seaborn as sns

mpg = sns.load_dataset('mpg')

mpg[mpg['cylinders'].isna()] # This works

mpg.query('cylinders.isna()') # This raises an exception
TypeError: 'Series' objects are mutable, thus they cannot be hashed
halfer
  • 19,824
  • 17
  • 99
  • 186
user8270077
  • 4,621
  • 17
  • 75
  • 140

1 Answers1

7

Use parameter engine='python' for change default engine='numexpr':

print(mpg.query('cylinders.isna()', engine='python'))

Sample:

mpg = pd.DataFrame({'cylinders':['a', np.nan]})
print(mpg)
  cylinders
0         a
1       NaN

print(mpg.query('cylinders.isna()', engine='python'))
  cylinders
1       NaN

More information about query is in Dynamic Expression Evaluation in pandas using pd.eval().

jezrael
  • 822,522
  • 95
  • 1,334
  • 1,252