【Python】複数項目同士のマッチングを行う
処理概要
マスタなどのエクセル表と配列の値同士でマッチングを行い、合致した行のキー項目を表示する。
サンプルマスタ
- CPUと各パラメータのマスタ
- コア~ソケットまでの値が合致したら商品名を表示する
商品名 | コア | スレッド | L3キャッシュ | P-coreベースクロック | E-coreベースクロック | TB時最大 | 対応メモリ1 | 対応メモリ2 | TDP(PBP) | ソケット |
---|---|---|---|---|---|---|---|---|---|---|
Core i9 13900 | 24 | 32 | 36MB | 2.00GHz | 1.50GHz | 5.50GHz | DDR5-5600 | DDR4-3200 | 65W | LGA1700 |
Core i9 13900F | 24 | 32 | 36MB | 2.00GHz | 1.50GHz | 5.50GHz | DDR5-5600 | DDR4-3200 | 65W | LGA1700 |
Core i9 13900K | 24 | 32 | 36MB | 3.00GHz | 2.20GHz | 5.70GHz | DDR5-5600 | DDR4-3200 | 125W | LGA1700 |
Core i9 13900KF | 24 | 32 | 36MB | 3.00GHz | 2.20GHz | 5.70GHz | DDR5-5600 | DDR4-3200 | 125W | LGA1700 |
Core i9 13900KS | 24 | 32 | 36MB | 3.20GHz | 2.20GHz | 6.00GHz | DDR5-5600 | DDR4-3200 | 150W | LGA1700 |
処理内容
- Excelファイルを読み込む
- 読み込んだ内容をデータフレームに格納する
- 配列の値とパラメータでパターンマッチングを行う
- パターンに合致する商品名を表示する
事前準備
ライブラリ
- 以下のライブラリをインストールしておく
- openpyxl
- pandas
作業対象ファイル
- プログラム中で指定するパスにマスタとなるExcelファイルを配置しておく
コード
import pandas as pd def check_pattern(arr, pattern): return arr == pattern # Excelファイルの読み込み excel_file_path = '/path/to/master_file.xlsx' df = pd.read_excel(excel_file_path, dtype=str) # 比較するパラメータの格納 param_array = ['24', '32', '36MB', '3.20GHz', '2.20GHz', '6.00GHz', 'DDR5-5600', 'DDR4-3200', '150W', 'LGA1700'] # パターン判定を行う for idx, row in df.iterrows(): pattern_name = row.iloc[0] pattern = row[1:].tolist() result = check_pattern(param_array, pattern) if result: print(f'合致する商品名: {pattern_name}')
pandasを使わない場合のコード
import openpyxl def check_pattern(arr, pattern): return arr == pattern # Excelファイルの読み込み excel_file_path = '/path/to/master_file.xlsx' workbook = openpyxl.load_workbook(excel_file_path, data_only=False) sheet = workbook.active # 比較するパラメータの格納 param_array = ['24', '32', '36MB', '3.20GHz', '2.20GHz', '6.00GHz', 'DDR5-5600', 'DDR4-3200', '150W', 'LGA1700'] # パターン判定を行う for row in sheet.iter_rows(min_row=2, values_only=True): pattern_name = row[0] pattern = list(row[1:]) pattern = [str(cell) for cell in pattern] # セルの値を文字列に変換 result = check_pattern(param_array, pattern) if result == True: print(f'合致する商品名: {pattern_name}') # ファイルを閉じる workbook.close()