2.3.5
read_csvで日付が解釈できずValueErrorになる
まとめ
pd.read_csv()で日付列を正しくパースできないValueErrorを解決する。parse_dates引数やカスタムconverters、pd.to_datetime()で日付を変換する。- CSVの日付列がobject型のままになる、または複数フォーマットが混在するときに参照する。
日付列を含む CSV を読み込むとき、次のようなエラーメッセージが出ることがあります。
ValueError: time data '31/12/2024 23:00' does not match format '%Y-%m-%d %H:%M'
あるいは読み込み自体はできても、日付列がオブジェクト型のままでソートや差分計算ができないこともあります。
これは 日付フォーマットの推定が失敗している、または 混在した形式が存在する ためです。
解決法 1: parse_dates と日付フォーマットを指定する #
| |
parse_dates に列名を渡すと、読み込み時に自動で datetime64 型へ変換されます。
欧州形式のように日付が先頭に来る場合は dayfirst=True を忘れずに。
解決法 2: 独自フォーマットを converters で変換する #
複数フォーマットが混在する場合は、自前の変換関数を用意します。
| |
解決法 3: 読み込み後に to_datetime で一括処理 #
| |
読み込み後に pd.to_datetime() を呼び出す方法もあります。errors="coerce" を使えば、エラーを出さず強制的に欠損 (NaT) にできます。
チェックリスト #
- 日付列に 複数の書式 が混じっていないか
- 日付列に 時差情報 (UTC±) が含まれていないか
- 数値列と見せかけて Excel のシリアル値 が紛れ込んでいないか
NaTに落としたレコードについて、後続処理でどう扱うか決めたか