誕生年単位の馬名ファイルとCSVファイル内の馬名との完全一致検索を実行するコードです。[Python] 229にも似たようなコードを書いています。
実行時間が結構かかり、改善の余地ありです。C言語でモジュールを書いたらどれだけ早くなるか、試してみたいです。
import csv
import pandas as pd
<中略>
with open (file_new_pre, mode="r", encoding="shift_jis") as f3:
with open (file_new, mode="a", encoding="shift_jis") as f4:
writer = csv.writer(f4)
for i,row in enumerate(csv.reader(f3)):
if i != 0:
if int(year) >=2001: # 満年齢
birthyear = int(year) - int(re.sub("\\D", "", row[4]))
else: # 2000年以前は数え年
birthyear = int(year) - int(re.sub("\\D", "", row[4])) + 1
# 誕生年馬名ファイル
namefile = f'horse{birthyear}.csv'
try:
df = pd.read_csv(namefile,encoding="shift_jis")
except:
horseID = '198500000'
else:
# 馬名ファイル各行の馬名とレースファイルの馬名が完全一致する場合にTrueとする配列を作成
b_array = df[df.columns[1]]==row[3]
# ブール値の配列として取り出しリスト化
b_array_v = b_array.values.tolist()
# Trueのインデックス値を取得
try:
i = b_array_v.index(True)
except: # 該当なし
horseID = '100000000'
else: # horseID取得
horseID = df.iloc[i,0]
rows = row[0:22] + [horseID]
writer.writerow(rows)
else: # タイトル行(0行目)
rows = row[0:22] + ['horseID']
writer.writerow(rows)