型を直す
このレッスンでできるようになること。文字列として読み込まれた数値を、計算できる数値型に直せるようになります。
売上CSVの金額欄が 3,600円 と書かれていることがあります。人間には読みやすいのですが、pandas はこれを数値と認識できません。カンマと円という文字が混ざっているからです。結果としてその列は object 型、つまり文字列の列として読み込まれます。
文字列の列で合計を出すと、エラーにならずに "3,600円7,800円" のような結果が返ります。文字列同士の足し算は連結だからです。気づかずに集計を進めるといちばん危険な種類の事故です。前のレッスンで info や dtypes を見る習慣をつけたのは、これを見つけるためです。
直す手順は2段階です。まず余計な文字を消し、次に型を変えます。
Python
import pandas as pd
df = pd.read_csv("sales.csv")
cleaned = df["金額"].str.replace(",", "", regex=False).str.replace("円", "", regex=False)
df["金額"] = cleaned.astype(int)str は文字列専用の道具をまとめた入口で、strアクセサと呼びます。.str.replace() を書くと、列のすべての値に対して置換が走ります。regex=False は「正規表現ではなくただの文字として扱う」という指定です。付けておくと意図しない置換を防げます。
astype が型変換です。astype(int) で整数に、astype(float) で小数になります。1文字でも数字以外が残っていると ValueError になるので、置換の漏れはここで分かります。
もう1つ、pd.to_numeric という手もあります。pd.to_numeric(df["金額"], errors="coerce") と書くと、変換できない値を NaN にして先に進みます。乱れがひどく、どの行が悪いのか分からないときは、これで NaN にしてから欠損として扱う方法が使えます。この演習では、円マークとカンマを取り除いて整数に直します。
要件
- str.replace でカンマと円をそれぞれ取り除く
- astype で整数型に直して金額列に代入し直す
- dtype に直したあとの型名を文字列で入れる
- total に金額の合計を int で入れる
- amounts に金額のリストを入れる
入出力例
fix_amount_type("売上日,店舗,商品名,カテゴリ,数量,金額
2026-01-05,渋谷店,白磁のマグカップ,食器,2,"3,600円"
2026-01-06,横浜店,鉄のフライパン,調理器具,1,"7,800円"
2026-01-07,大宮店,積み重ね収納ボックス,収納,3,"4,500円"
") → {"amounts":[3600,7800,4500],"dtype":"int64","total":15900}
fix_amount_type("売上日,店舗,商品名,カテゴリ,数量,金額
2026-02-03,渋谷店,鋳物ホーロー鍋,調理器具,1,"16,800円"
2026-02-05,渋谷店,布製収納バスケット,収納,2,"3,000円"
") → {"amounts":[16800,3000],"dtype":"int64","total":19800}