#python #pandas #dataframe
#python #pandas #фрейм данных
Вопрос:
У меня есть два фрейма данных, df1
и df2
, которые обычно были бы равны. Мне нужно проверить это равенство в коде. К сожалению, я не могу просто использовать df1.equals(df2)
, потому что оба фрейма данных содержат:
- NaNs
- Числа с плавающей точкой
Есть ли эффективный способ сравнить весь фрейм данных сразу, вместо того, чтобы разбивать их на строки / столбцы и проверять, соответствуют ли 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
отличаются