Я пытаюсь сравнить ниже два фрейма данных с "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')
У вас есть AssertionError?
@Lisa проверьте мой комментарий к ответу Вэнь






Индекс является частью фрейма данных, если индексы разные, мы должны сказать, что фреймы данных разные, даже значение 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 игнорирует только тип данных индекса, а не сами значения. Таким образом, флаг не эквивалентен «игнорировать значения индекса».
Это, однако, будет ТОЛЬКО проверять значения, а не, например, имена столбцов. Для случая использования, когда не следует проверять только индекс, я думаю, лучше использовать assert_frame_equal (df1.reset_index (drop = True), ...)
Если вам действительно все равно, что индекс равен, вы можете удалить индекс следующим образом:
assert_frame_equal(d1.reset_index(drop=True), d2.reset_index(drop=True))
reset_index (drop = True) не работает .. вы уверены? Это усечение всего фрейма данных.
дает ли assert значение "False"?