背景
get_fins_statements() は API レスポンスの statements を pd.DataFrame.from_dict(data) で DataFrame 化していますが、LocalCode の dtype を明示していません。
下流(SDK→pandas DataFrame→to_dict('records'))で取り回すと、欠損混在などの条件次第で LocalCode が数値列として扱われ、7203 が 7203.0 のような float になって出てくる可能性があります(pandasの型推論都合)。
また JPX では 2024 年以降、英文字を含む銘柄コード(例: 186A)も存在するため、LocalCode は「文字列で扱う」ことがより安全です。
提案
get_fins_statements() が返す DataFrame において、LocalCode を常に文字列として扱うように明示する。
例(アイデア):
- DataFrame 作成後に
LocalCode を pandas の string dtype に寄せる
df["LocalCode"] = df["LocalCode"].astype("string")
- あるいは
df["LocalCode"] = df["LocalCode"].astype(str)(ただし欠損の扱いが変わる可能性があるため要検討)
※ 既に range 系のキャッシュ読み込み(pd.read_csv(..., dtype=str))では dtype を固定する方針が見えるため、ここも同様に寄せるのが一貫します。
期待する効果
LocalCode の型揺らぎ(7203 → 7203.0 など)を発生源で抑止
- 英数字コード(
186A 等)も安全に取り扱える
- 下流のETL/DBのFail-Fastバリデーションが「型の都合」で頻発停止するリスクを減らす
テスト
LocalCode の dtype/値が文字列として安定することを確認するテスト追加