Skip to content

Ensure fins/statements LocalCode stays string (avoid 7203.0 float conversion) #108

@apokamo

Description

@apokamo

背景

get_fins_statements() は API レスポンスの statementspd.DataFrame.from_dict(data) で DataFrame 化していますが、LocalCode の dtype を明示していません。

下流(SDK→pandas DataFrame→to_dict('records'))で取り回すと、欠損混在などの条件次第で LocalCode が数値列として扱われ、72037203.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 の型揺らぎ(72037203.0 など)を発生源で抑止
  • 英数字コード(186A 等)も安全に取り扱える
  • 下流のETL/DBのFail-Fastバリデーションが「型の都合」で頻発停止するリスクを減らす

テスト

  • LocalCode の dtype/値が文字列として安定することを確認するテスト追加
    • 数字コード(7203)と英数字(186A)の両方

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions