使用環境
- OS:Windows 10 Pro(バージョン:20H2)
- 言語:Python(pandas・datetime使用)
経緯
PythonでCSVファイルからデータを読み込んで処理をしている中で、
日付データを取得して、正しい形式(datetime型)に変換したいと思いました。
特に今回は、
「2022年6月23日」のように漢字を含んだ日付が入力されていたため、
通常の日付パースとは異なる対応が必要でした。
解決方法:置換とdatetime変換を組み合わせる
漢字をスラッシュ(/)に置き換えた後、
**datetime.strptime()
**を使って、正しい日付型に変換する方法を取りました。
手順とコード例
① CSVファイルから日付データを取得する
import pandas as pd
df = pd.read_csv("sample.csv")
# (0,0)の位置に日付があると仮定
date_str = df.iat[0, 0]
② 漢字をスラッシュに置き換える
# 年・月・日をそれぞれ置き換え
tstr = date_str.replace('年', '/').replace('月', '/').replace('日', '')
③ datetime型に変換する
import datetime
# 文字列をdatetime型に変換
tdatetime = datetime.datetime.strptime(tstr, '%Y/%m/%d')
④ 年月日のみを取り出す(時間情報を除く)
# 年・月・日だけを取り出してdatetime.date型にする
tdate = datetime.date(tdatetime.year, tdatetime.month, tdatetime.day)
処理結果
tdate
には、以下のような純粋な日付データが格納されます。
2022-06-23
これで、時刻(0時0分)が不要な場合にも、きれいに日付だけを取り出すことができます。
ポイントまとめ
- CSVファイルから直接取得した日付が漢字を含む場合、**replace()**でスラッシュ(/)に変換するのが効果的です。
- 変換後は、**
datetime.strptime()
で型変換を行い、さらにdatetime.date()
**で年月日のみを抽出できます。 - Pythonでは文字列型(str)と日付型(datetime型)は明確に区別されるため、変換処理は非常に重要です。
まとめ
Pythonでcsvデータから日付を取得して整形したい場合は、
- まず漢字をスラッシュに置換
- その後、
datetime.strptime()
でdatetime型に変換 - 必要に応じてdatetime.date型へ変換
という流れを取ることで、
どんな形式の日付にも柔軟に対応できるようになります。
データクリーニングや前処理の場面で、非常に便利なテクニックです。
ここまでお読みいただき、誠にありがとうございました。