В качестве примера набора данных -
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'])
В Pandas 1.0.3, я мог бы отфильтровать строки выше в DataFrame, где lmark
> 3 со следующими -
data_filtered = data_raw.loc[(slice(None), slice(None), [np.NaN, slice(3)]), :]
, но в Pandas 1.1.0, то же утверждение не выполняется с
TypeError: unhashable type: 'slice'
, очевидно, это изменение в design .
В этом случае как Могу ли я отфильтровать строки DataFrame ниже, где lmark> 3?