Сравнение столбцов данных и возвращение разницы - PullRequest
1 голос
/ 01 апреля 2019

У меня есть несколько фреймов данных (около 37), и я хотел бы сравнить имена столбцов этих фреймов, чтобы я знал, что все они имеют одинаковый порядок столбцов и столбцов.Кадры данных хранятся в виде списка объектов (например, tbl [0] является первым кадром данных, tbl [1] является вторым и т. Д.).

Я написал следующий блок кода, который будет брать каждый столбец моих фреймов данных (tbl) и сравнивать их со столбцами других фреймов данных. Если есть разница, то индекс этих фреймов данных добавляется в 2D-список,который я могу позже вспомнить, чтобы увидеть, где столбцы не соответствуют.

a = [[]]
for i in range(0,len(tbl)):
    for j in range(i+1, len(tbl)):
        if(~(tbl[i].columns.equals(tbl[j].columns))):
            a.append([i, j])

Но когда я запускаю приведенный выше код, он добавляет все индексы фреймов данных, которые я сравниваю.Что-то не так, что я делаю здесь?

Пример:

tbl = []

for i in range(0,3):
    tbl.append(pd.DataFrame({'a':[1,2,3],'b':[3,4,5], 'c':[7,8,3], 'd':[1,5,3]}))

a = [[]]
for i in range(0,len(tbl)):
    for j in range(i+1, len(tbl)):
        if(~(tbl[i].columns.equals(tbl[j].columns))):
            a.append([i, j])

Ради этого вопроса я создал 3 фиктивных кадра данных с одинаковыми именами столбцов (a, b,CD).Когда я сравниваю имена столбцов, используя код, упомянутый ранее, я получаю следующий вывод:

[[], [0, 1], [0, 2], [1, 2]]

Разве я не должен получать пустой список?Что я тут не так делаю?

1 Ответ

1 голос
/ 01 апреля 2019

Используйте if not для работы с bool scalars :

print (~True)
-2

a = [[]]
for i in range(0,len(tbl)):
    for j in range(i+1, len(tbl)):
        if not (tbl[i].columns.equals(tbl[j].columns)):
            a.append([i, j])

print (a)
[[]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...