Разность Excel с питоном

Я ищу алгоритм, чтобы выдержать сравнение два, превосходят листы, на основе их имен столбцов, в Пайтоне.

Я не знаю, каковы колонки, таким образом, у одного листа может быть дополнительная колонка, или у обоих листов может быть несколько колонок с тем же самым именем.

Самый легкий случай - когда колонка в первом листе соответствует только одной колонке во втором, превосходят лист. Тогда я могу выступить, разность на рядах той колонки, используя xlrd . Если имя столбца не уникально, я могу проверить, есть ли у колонок то же самое положение.

Кто-либо знает об уже существующем алгоритме или имеет опыт в этой области?

1
nl ja de
I' ve, сделанный довольно большая работа над Excel, покрывает в мои дни.. There' s никакой реальный алгоритм для этого вида задачи, но это зависит от того, на что должен быть похожим ваш результат.. проигнорируйте не соответствие именам столбцов или объедините их в совместный список?
добавлено автор Torxed, источник
Так, 1: Шоу, соответствующее colum имена, 2: Основной момент НЕ совпадающие значения в рамках тех двух колонок?
добавлено автор Torxed, источник
Отправленный решение с двумя рядами вашей проблемы, который, принимает you' ve уже добрался xlrd rowdata и имена. Сообщите мне, нуждаетесь ли вы в помощи с xlrd специфические особенности, такие как получение ценностей ряда:)
добавлено автор Torxed, источник
Вы могли дать пример на листовых данных? Например, имена colum повторяются? как так: Животные Цветов Животных Colortype
добавлено автор Torxed, источник
На самом деле я хочу подчеркнуть несоответствие клеткам соответствия колонкам и подчеркнуть целые колонки несоответствия. Я имею в виду колонки, которые отсутствуют или дополнительны во втором листе. Что использование объединения - не соответствующие имена столбцов в совместный список?
добавлено автор user1711699, источник
да, и добавьте имена столбцов, которые отсутствуют во втором листе, где они появляются в первом листе также. Но на самом деле я не уверен, захватываю ли я все колонки соответствия как это. Когда имя столбца не уникально, это не было бы настолько легко.
добавлено автор user1711699, источник

1 ответы

Быстро грязное:

# Since order of the names doesn't matter, we can use the set() option
matching_names = set(sheet_one_names) & set(sheet_one_names)
...
# Here, order does matter since we're comparing rowdata..
# not just if they match at some point.
matching_rowdata = [i for i, j in zip(columndata_one, columndata_two) if i != j]

Примечание: Это предполагает, что вы сделали несколько вещей вперед,

  1. получает имена столбцов для листа 1 с помощью xlrd и то же самое для второго листа,
  2. получает данные о ряде для обоих листов в двух различных переменных.

Это должно дать вам общее представление.

Также обратите внимание, что, делая [...] выбор (второй) важно, чтобы ряды имели ту же самую длину, иначе это будет пропущено. Это - МАТЧ МИСС сценарий, перемена, чтобы получить матчи в потоке данных.

Это - более медленное, но функциональное решение:

column_a_name = ['Location', 'Building', 'Location']
column_a_data = [['Floor 1', 'Main', 'Sweden'],
                ['Floor 2', 'Main', 'Sweden'],
                ['Floor 3', 'Main', 'Sweden']]

column_b_name = ['Location', 'Building']
column_b_data = [['Sweden', 'Main', 'Floor 1'],
                ['Norway', 'Main', 'Floor 2'],
                ['Sweden', 'Main', 'Floor 3']]

matching_names = []
for pos in range(0, len(column_a_name)):
    try:
        if column_a_name[pos] == column_b_name[pos]:
            matching_names.append((column_a_name[pos], pos))
    except:
        pass # Index out of range, column length are not the same

mismatching_data = []
for row in range(0, len(column_a_data)):
    rowa = column_a_data[row]
    rowb = column_b_data[row]

    for name, _id in matching_names:
        if rowa[_id] != rowb[_id] and (rowa[_id] not in rowb or rowb[_id] not in rowa):
            mismatching_data.append((row, rowa[_id], rowb[_id]))

print mismatching_data
0
добавлено
Я слышу вас. Позвольте мне построить что-то или найти мои старые отрывки..
добавлено автор Torxed, источник
Проверьте, работает ли это к вашей симпатии. я добираюсь [(1, ' Sweden' ' Norway')] , поскольку несоответствие, который, должно быть что you' поиск ре? Обратите внимание, что 1 ряд, на котором совершила нападки неудача, и я рассчитываю на column_a, являющийся самым большим (that' s что-то you' ll должны добавить, терпят неудачу безопасный для, проверяя, какая колонка является самой длинной и т.д. и т.д.),
добавлено автор Torxed, источник
Добавленный фиксация для этого. Теперь это соответствует, если ряд отличается, и ценности не перепутаны. Согласно вашему второму сценарию.. Таким образом, вы покрываете обоих из тех:)
добавлено автор Torxed, источник
I' ve посмотрел на подобную проблему на моей старой работе, я добавил таблицы преобразования для известных неисправностей в именах столбцов, тогда я добавил соответствующие строки нечеткой логики в клетках, дающих мне некоторые грубые оценки на том, что не сочеталось, даже если в данных был записан мисс или поместил в неправильных клетках. И в некоторых пунктах я пропустил имена клетки и просто соответствовал данным о ряде, соответствовавшим ВСЕМУ другому rowdata только, чтобы видеть, были ли ряды заказом missplaced/wrong, следовательно, если 1 клетка существовала вообще в других клетках в другом документе и затем если ТОТ ряд соответствовал тому где порожденная клетка.
добавлено автор Torxed, источник
Спасибо, но что происходит, если бы имя появляется дважды в обоих листах, каковы были бы критерии, чтобы найти соответствующие колонки? Я имею в виду, когда нет никакого непосредственного отношения между именами столбцов в обоих листах?
добавлено автор user1711699, источник
Спасибо, да это - один из случаев. Другой, возможно, был то, что второе местоположение будет соответствовать Местоположению в column_b_name. Или что положение соответствующих имен не соответствовало вообще. Я предполагаю, что нет никакого алгоритма, делающего такую вещь. Это может быть действительно сложно. Большое спасибо.
добавлено автор user1711699, источник
Спасибо это помогает много
добавлено автор user1711699, источник
Python
Python
7 654 участник(ов)

Уютный чат для профессионалов, занимающихся поиском питоньих мудростей. Как не получить бан: https://t.me/ru_python/577926

Python beginners
Python beginners
4 449 участник(ов)

Вопросы про Python для чайников. Cпам и троллинг неприемлем. Не злоупотребляйте стикерами. Частозадаваемые вопросы: https://github.com/ru-python-beginners/faq/blob/master/README.md Статистика тут: https://grstats.me/chat/x4qym2k5uvfkr3al6at7

pro.python
pro.python
1 090 участник(ов)

Сообщество разработчиков под Python Создатель: @rodgelius

Rude Python
Rude Python
971 участник(ов)

Python без „девочек”, здесь матерятся и унижают Django. Not gay friendly. Правила: t.me/rudepython/114107 @rudepython | t.me/rudepython

rupython
rupython
509 участник(ов)

Группа создана с целью оперативного получения ответов на возникающие вопросы по разработке на яп python, смежные темы, а также человеческого общения. Приветствую!

Python-programming
Python-programming
266 участник(ов)

Чат группы вконтакте https://vk.com/python_community