日付型にする
このレッスンでできるようになること。文字列の日付を日付型に変換し、そこから月や曜日を取り出せるようになります。
read_csv は日付を文字列として読み込みます。2026-01-05 は数字とハイフンの並びに見えますが、pandas にとってはただの文字列です。文字列のままだと、月ごとの集計もできませんし、期間で絞ることもできません。
日付型に直すのが pd.to_datetime です。
Python
import pandas as pd
df = pd.read_csv("sales.csv")
df["売上日"] = pd.to_datetime(df["売上日"])これで型が datetime64 になります。よくある形式は自動で読み取ってくれるので、2026-01-05 も 2026/1/5 も同じように通ります。日本語の 2026年1月5日 のような形は自動では読めないので、pd.to_datetime(df["売上日"], format="%Y年%m月%d日") のように形式を教えます。
日付型にするとdtアクセサが使えます。前のレッスンの str アクセサと同じ考え方で、日付専用の入口です。
df["売上日"].dt.yearは年df["売上日"].dt.monthは月の数字df["売上日"].dt.dayは日df["売上日"].dt.dayofweekは曜日の番号で、月曜が0、日曜が6
月別の売上を出したいなら、まず月の列を作ります。df["月"] = df["売上日"].dt.month と書けば、4章の groupby でそのまま束ねられます。年をまたぐデータでは月の数字だけだと去年の1月と今年の1月が混ざるので、df["売上日"].dt.to_period("M") で「2026-01」という年月の単位にするのが安全です。
日付型どうしは引き算ができます。df["売上日"].max() - df["売上日"].min() で、データが何日分あるかが分かります。前処理の最後にこれを見ておくと、想定より短い期間しか入っていない事故に気づけます。この演習では、売上日を日付型にして月の列を作ります。
要件
- pd.to_datetime で売上日を日付型にする
- dt.month で月の列を作る
- dtype に変換後の型名を文字列で入れる
- months に月のリストを入れる
- month_count に月の種類数、span_days に最大と最小の差の日数を int で入れる
入出力例
add_month("売上日,店舗,商品名,カテゴリ,数量,金額
2026-01-05,渋谷店,白磁のマグカップ,食器,2,3600
2026-02-06,横浜店,鉄のフライパン,調理器具,1,7800
2026-02-07,大宮店,積み重ね収納ボックス,収納,3,4500
2026-03-08,渋谷店,木製カッティングボード,調理器具,1,4200
") → {"dtype":"datetime64[ns]","month_count":3,"months":[1,2,2,3],"span_days":62}
add_month("売上日,店舗,商品名,カテゴリ,数量,金額
2026-04-03,渋谷店,鋳物ホーロー鍋,調理器具,1,16800
2026-04-24,大宮店,白磁のマグカップ,食器,5,9000
") → {"dtype":"datetime64[ns]","month_count":1,"months":[4,4],"span_days":21}ヒント
編集 ゆめさく編集部