Np.isin не удается на Pd.index с несколькими dtypesPython

Программы на Python
Ответить
Anonymous
 Np.isin не удается на Pd.index с несколькими dtypes

Сообщение Anonymous »

Я заметил это странное поведение, задаваясь вопросом, что здесь происходит:

Скажем, я хочу найти экземпляры массива numpy / индекса pandas, которые включены в некоторый предопределенный список, который имеет несколько типов dtypes :

Код: Выделить всё

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])
Но объект Index ведет себя не так, как ожидалось. Вместо этого вы получаете

Код: Выделить всё

np.isin(idx, test) == np.array([False, True, False, False, True, False])
Это сохраняется, даже если вы преобразуете индекс в массив, но если вы преобразуете его в список, он возвращается к ожидаемому поведению:

Код: Выделить всё

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])
Что даже более страннее: если вы инициируете индекс из arr вместо lst , все работает как ожидалось изначально:

Код: Выделить всё

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])
Мне интересно, ошибка это или намеренное действие, и почему это происходит.

Подробнее здесь: https://stackoverflow.com/questions/793 ... ple-dtypes
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»