[Python] 228 複数のCSVファイル内検索 部分一致

1986年以降の馬データを対象とする検索コードを書いてみました。

出力されたindexとhorseIDの番号が1つずれていますがそういう仕様です。

今回は部分一致で実行しましたが、完全一致にしないと実用的ではないでしょう。

import glob,csv,re
import pandas as pd

print('検索したい馬名を入力してください')
name = input()

horseID_l = list()
for year in range(1986,2019 +1):
    namefile = f'/horse_racing/horse_list/horse{year}.csv'

    df = pd.read_csv(namefile,encoding="shift_jis")

    # 各行の馬名セルに検索馬名を含む場合にTrueとする縦向き配列を作成(部分一致)
    b_array = df[df.columns[1]].str.contains(name)

    # ブール値の横向き配列として取り出しリスト化
    b_array_v = b_array.values.tolist()

    # Trueのインデックス値を算出しhorseIDを取得
    try:
        i = b_array_v.index(True)
    except:
        pass
    else:
        print(f'year {year} index {i}')
        horseID = df.iloc[i,0]
        horsename = df.iloc[i,1]

        horseID_l.append([year,horseID,horsename])

print(f'{name} {horseID_l}')
--------------------------------------------------

出力
--------------------------------------------------
検索したい馬名を入力してください
ヒシマサル
year 1989 index 8573
year 1999 index 183
year 2014 index 6060
ヒシマサル [[1989, 198908574, '○外ヒシマサル'], [1999, 199900184, '□地ニシネヒシマサル'], [2014, 201405934, 'ヒシマサル']]