【发布时间】:2020-03-29 04:38:58
【问题描述】:
作为示例数据集 -
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 中,我可以过滤掉上面 lmark > 3 的 DataFrame 行,并使用以下内容 -
data_filtered = data_raw.loc[(slice(None), slice(None), [np.NaN, slice(3)]), :]
但在 Pandas 1.1.0 中,相同的语句失败并显示
TypeError: unhashable type: 'slice'
显然此更改是由 design 完成的。
在这种情况下,我如何过滤掉 lmark > 3 以下的 DataFrame 行?
【问题讨论】: