【Python】複数項目同士のマッチングを行う

2023年9月9日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

処理内容

  1. Excelファイルを読み込む
  2. 読み込んだ内容をデータフレームに格納する
  3. 配列の値とパラメータでパターンマッチングを行う
  4. パターンに合致する商品名を表示する

事前準備

ライブラリ

  • 以下のライブラリをインストールしておく
    • 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()

Python

Posted by junichi