As a example dataset -
In [12]: import numpy as np; import pandas as pd
In [24]: data_raw = pd.DataFrame([
...: ...: {'frame': 1, 'face': np.NaN, 'lmark': np.NaN, 'x': np.NaN, 'y': np.NaN},
...: ...: {'frame': 197, 'face': 0, 'lmark': 1, 'x': 969, 'y': 737},
...: ...: {'frame': 197, 'face': 0, 'lmark': 2, 'x': 969, 'y': 740},
...: ...: {'frame': 197, 'face': 0, 'lmark': 3, 'x': 970, 'y': 744},
...: ...: {'frame': 197, 'face': 0, 'lmark': 4, 'x': 972, 'y': 748},
...: ...: {'frame': 197, 'face': 0, 'lmark': 5, 'x': 973, 'y': 752},
...: ...: {'frame': 300, 'face': 0, 'lmark': 1, 'x': 745, 'y': 367},
...: ...: {'frame': 300, 'face': 0, 'lmark': 2, 'x': 753, 'y': 411},
...: ...: {'frame': 300, 'face': 0, 'lmark': 3, 'x': 759, 'y': 455},
...: ...: {'frame': 301, 'face': 0, 'lmark': 1, 'x': 741, 'y': 364},
...: ...: {'frame': 301, 'face': 0, 'lmark': 2, 'x': 746, 'y': 408},
...: ...: {'frame': 301, 'face': 0, 'lmark': 3, 'x': 750, 'y': 452}]).set_index(['frame', 'face', 'lmark'])
In Pandas 1.0.3, I could filter out rows of the DataFrame above where lmark > 3 with the following -
data_filtered = data_raw.loc[(slice(None), slice(None), [np.NaN, slice(3)]), :]
but in Pandas 1.1.0, the same statement fails with
TypeError: unhashable type: 'slice'
apparently this change is by design.
In that case, how could I filter out rows of the DataFrame below where lmark > 3?