Панды: 2 фрейма данных имеют разные формы, но не разные столбцы

1

У меня есть 2 кадра данных: a и b.

Когда я запускаю print(a.shape, b.shape), я получаю следующий результат: (1, 28849) (44, 29025) что означает, что b имеет больше столбцов, которые a. Когда я запускаю b.columns.difference(a.columns) результат имеет нулевой индекс: (Index([], dtype='object'). Я получаю тот же результат, когда я запускаю a.columns.difference(b.columns). Почему числовые кадры имеют разные столбцы в форме, но между ними нет разных столбцов?

  • 0
    Они разделяют метки столбцов?
  • 0
    @Will Из того, что я могу сказать, они имеют одинаковые метки столбцов. Я запустил set (a.columns) == set (b.columns) и получил True.
Показать ещё 2 комментария
Теги:
pandas
dataframe
indexing

1 ответ

3
Лучший ответ

Почему числовые кадры имеют разные столбцы в форме, но между ними нет разных столбцов?

Пустой двунаправленный pd.Index.difference не гарантирует, что столбцы из 2-х кадров данных одинаковы. Рассмотрим следующий пример:

A = pd.DataFrame(columns=[1, 1, 2, 3, 4])
B = pd.DataFrame(columns=[1, 2, 3, 4])

A.columns.difference(B.columns)  # Int64Index([], dtype='int64')
B.columns.difference(A.columns)  # Int64Index([], dtype='int64')

pd.Index.difference можно сравнить с set.difference, то есть он не рассматривает дубликаты. Если вы печатаете столбцы явно, вы должны увидеть, что они разные.

Или, чтобы явно вычислить подсчеты каждого имени столбца, вы можете использовать numpy.unique:

import numpy as np

print(np.unique(A.columns, return_counts=True))

(array([1, 2, 3, 4], dtype=int64), array([2, 1, 1, 1], dtype=int64))
  • 1
    Спасибо за разъяснения!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню