Как игнорировать сравнение индексов для pandas assert frame равным

Я пытаюсь сравнить ниже два фрейма данных с "check_index_type", установленным на False. Согласно документации, если для него установлено значение False, он не должен «проверять, что класс Index, dtype и inferred_type идентичны». Я неправильно понял документацию? как сравнить игнорирование индекса и возврат True для теста ниже?

Я знаю, что могу сбросить индекс, но предпочитаю этого не делать.

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.testing.assert_frame_equal.html

from pandas.util.testing import assert_frame_equal
import pandas as pd
d1 = pd.DataFrame([[1,2], [10, 20]], index=[0,2])
d2 = pd.DataFrame([[1, 2], [10, 20]], index=[0, 1])
assert_frame_equal(d1, d2, check_index_type=False)


AssertionError: DataFrame.index are different
DataFrame.index values are different (50.0 %)
[left]:  Int64Index([0, 2], dtype='int64')
[right]: Int64Index([0, 1], dtype='int64')

дает ли assert значение "False"?

Yuca 02.08.2018 16:15

У вас есть AssertionError?

harvpan 02.08.2018 16:16

@Lisa проверьте мой комментарий к ответу Вэнь

Yuca 02.08.2018 16:25
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
43
3
20 756
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Индекс является частью фрейма данных, если индексы разные, мы должны сказать, что фреймы данных разные, даже значение dfs одинаковое, поэтому, если вы хотите проверить значение, используя array_equal из numpy

d1 = pd.DataFrame([[1,2], [10, 20]], index=[0,2])
d2 = pd.DataFrame([[1, 2], [10, 20]], index=[0, 1])
np.array_equal(d1.values,d2.values)
Out[759]: True

Для получения дополнительной информации о assert_frame_equal в мерзавец

Чтобы ответить на часть assert_frame_equal, check_index_type игнорирует только тип данных индекса, а не сами значения. Таким образом, флаг не эквивалентен «игнорировать значения индекса».

Yuca 02.08.2018 16:16

Это, однако, будет ТОЛЬКО проверять значения, а не, например, имена столбцов. Для случая использования, когда не следует проверять только индекс, я думаю, лучше использовать assert_frame_equal (df1.reset_index (drop = True), ...)

SimonCW 20.02.2019 10:30

Если вам действительно все равно, что индекс равен, вы можете удалить индекс следующим образом:

assert_frame_equal(d1.reset_index(drop=True), d2.reset_index(drop=True))

reset_index (drop = True) не работает .. вы уверены? Это усечение всего фрейма данных.

endless 28.01.2020 01:02

Другие вопросы по теме