Самый эффективный способ проверить равенство двух больших фреймов данных, содержащих числа с плавающей запятой и NAN?

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

У меня есть два фрейма данных, df1 и df2 , которые обычно были бы равны. Мне нужно проверить это равенство в коде. К сожалению, я не могу просто использовать df1.equals(df2) , потому что оба фрейма данных содержат:

  1. NaNs
  2. Числа с плавающей точкой

Есть ли эффективный способ сравнить весь фрейм данных сразу, вместо того, чтобы разбивать их на строки / столбцы и проверять, соответствуют ли NAN и что значения с плавающей точкой также совпадают в epsilon с использованием np.isclose() ?

Кроме того, если мне нужно разбить DataFrame , эффективнее ли разбивать его на строки или столбцы (я подозреваю, что последнее)?

Комментарии:

1. Эффективнее разбить их по столбцам, потому что примерно так они хранятся в памяти: куча Series (для каждого столбца), все с одинаковым индексом.

2. Кроме того, из документов: NaNs in the same location are considered equal. Почему вы не можете использовать df1.equals(df2) ?

3. @MohammadJafarMashhadi если я правильно понимаю документы, NAN будут обрабатываться правильно, но немного отличающиеся значения с плавающей запятой не будут.

4. Можете ли вы использовать assert_frame_equal() ? У него есть настройка точности, поэтому вы можете сравнить, скажем, 5 цифр после запятой: pandas.pydata.org/pandas-docs/stable/reference/api /…

5. @RichieV pandas.pydata.org/pandas-docs/stable/reference/api/… Вот так df.eq и df.equals отличаются