Я заметил это странное поведение, задаваясь вопросом, что здесь происходит:
Скажем, я хочу найти экземпляры массива numpy / индекса pandas, которые включены в некоторый предопределенный список, который имеет несколько типов dtypes :
Я заметил это странное поведение, задаваясь вопросом, что здесь происходит:
Скажем, я хочу найти экземпляры массива numpy / индекса pandas, которые включены в некоторый предопределенный список, который имеет [b]несколько типов dtypes [/b]: [code]lst = ["A", "B", 1, 2, "C", 3] test = ["B", 1, 2, "C"]
arr = np.array(lst) idx = pd.Index(lst) < /code> Вы ожидаете получить одинаковое поведение: < /p> np.isin(lst, test) == np.isin(arr, test) == np.isin(idx, test) # np.array([False, True, True, True, True, False]) [/code] Но объект Index ведет себя не так, как ожидалось. Вместо этого вы получаете [code]np.isin(idx, test) == np.array([False, True, False, False, True, False]) [/code] Это сохраняется, даже если вы преобразуете индекс в массив, но если вы преобразуете его в список, он возвращается к ожидаемому поведению: [code]np.isin(idx.to_numpy(), test) # np.array([False, True, False, False, True, False]) np.isin(idx.to_list(), test) # np.array([False, True, True, True, True, False]) [/code] Что даже более страннее: если вы инициируете индекс из arr вместо lst , все работает как ожидалось изначально: [code]idx_from_arr = pd.Index(arr) np.isin(lst, test) == np.isin(arr, test) == np.isin(idx_from_arr, test) # np.array([False, True, True, True, True, False]) [/code] Мне интересно, ошибка это или намеренное действие, и почему это происходит.