1

Python で、列名に基づいて 2 つの Excel シートを比較するアルゴリズムを探しています。

列が何であるかわからないため、1 つのシートに追加の列があるか、両方のシートに同じ名前の複数の列がある可能性があります。

最も簡単なケースは、最初のシートの列が 2 番目の Excel シートの 1 つの列のみに対応する場合です。次に、を使用して、その列の行に対して diff を実行できますxlrd。列名が一意でない場合、列の位置が同じかどうかを確認できます。

誰かが既存のアルゴリズムを知っているか、このドメインでの経験がありますか?

4

1 に答える 1

0

汚れた高速:

# 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 番目のシートでも同じようにします。
  2. 2 つの異なる変数で両方のシートの行データを取得します。

これはあなたにアイデアを与えるためです。

[...] オプション (2 つ目) を実行する場合、行の長さが同じであることが重要であることに注意してください。それ以外の場合はスキップされます。これはMISS-MATCHシナリオであり、逆にデータ フローで一致を取得します。

これは遅くなりますが機能的な解決策です。

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
于 2013-02-07T10:03:04.730 に答える