はじめに
データを扱う際、タイムゾーンの違いによる日時の変換は避けられない問題のひとつです。特に、サーバーから取得したデータがUTC(協定世界時)で記録されている場合、日本時間(JST)に変換する必要があります。
今回は Python を使って UTC の日時データを JST に変換するスクリプト を作成し、その方法を詳しく解説します。
1. Pythonの環境を準備
まずは、必要なライブラリをインストールします。
pip install pandas pytz
pandas
はデータ処理を行うためのライブラリで、pytz
はタイムゾーンの変換を行うために使用します。
2. CSVファイルの準備
今回のサンプルでは、以下のような UTCの日付データ を含むCSVファイル(input.csv
)を使用します。
input.csv(変換前)
ID | Title | Date (UTC) |
---|---|---|
1 | Sample 1 | 2025-03-13 16:17:56 |
2 | Sample 2 | 2025-03-13 18:30:45 |
3. UTC → JST 変換スクリプト
以下のPythonスクリプトを使って、UTCの日時を日本時間(JST)に変換します。
convert_utc_to_jst.py
import pandas as pd
import pytz
# CSVファイルのパスを指定
input_file = "input.csv" # 変換するCSVファイル
output_file = "output_jst.csv" # 変換後のCSVファイル
# CSVファイルを読み込む
df = pd.read_csv(input_file)
# カラム名のチェック
print("CSVのカラム一覧:", df.columns.tolist())
# UTCと日本時間のタイムゾーンを設定
utc = pytz.utc
jst = pytz.timezone('Asia/Tokyo')
# UTC→JST変換(カラム名を事前にチェック)
if 'Date' in df.columns:
df['Date'] = pd.to_datetime(df['Date'], errors='coerce') # 文字列を日付型に変換
df = df.dropna(subset=['Date']) # 変換できなかった(NaT)行を削除
df['Date'] = df['Date'].dt.tz_localize(utc).dt.tz_convert(jst) # タイムゾーン変換
df['Date'] = df['Date'].dt.strftime('%Y-%m-%d %H:%M:%S') # タイムゾーン情報を削除
else:
print("エラー: 'Date' カラムが見つかりません。カラム名を確認してください。")
# 変換後のCSVを保存
df.to_csv(output_file, index=False, encoding='utf-8-sig')
print(f"変換完了: {output_file} に保存されました")
4. カラム名のチェックについて
このスクリプトでは、if 'Date' in df.columns:
で Date
カラムが存在するかどうかをチェックしています。
なぜカラム名のチェックが必要か?
- CSVファイルによっては、列名が 大文字・小文字の違い や 不要なスペース で異なることがあります。
- 例えば、CSVファイルのカラム名が
"date"
(小文字)や" Date "
(空白付き)だった場合、スクリプトが正しく動作しない可能性があります。
カラム名を事前に確認する方法
スクリプト内で print(df.columns.tolist())
を実行すると、実際のカラム名を一覧で確認できます。
また、カラム名を統一するために、以下のように 小文字変換 & 空白削除 をする方法もあります。
# カラム名を小文字に変換し、空白を削除
df.columns = df.columns.str.strip().str.lower()
# 小文字に変換したカラム名でチェック
if 'date' in df.columns:
この方法を使えば、カラム名の違いによるエラーを防ぐことができます。
5. スクリプトの実行
仮想環境を有効化している場合は source myenv/bin/activate
した後に、以下のコマンドで実行します。
python convert_utc_to_jst.py
6. 変換後の結果
スクリプトを実行すると、JST に変換されたデータが output_jst.csv
に保存されます。
output_jst.csv(変換後)
ID | Title | Date (JST) |
---|---|---|
1 | Sample 1 | 2025-03-14 01:17:56 |
2 | Sample 2 | 2025-03-14 03:30:45 |
変換結果:
2025-03-13 16:17:56 UTC
→2025-03-14 01:17:56 JST
2025-03-13 18:30:45 UTC
→2025-03-14 03:30:45 JST
UTC の時刻に +9時間 が加算され、日本時間になっています。
7. まとめ
このスクリプトを活用すれば、UTC の日時データを簡単に JST に変換できます。
ポイント
pandas
とpytz
を使って簡単にタイムゾーン変換.dt.tz_localize(utc).dt.tz_convert(jst)
で変換処理.dt.strftime('%Y-%m-%d %H:%M:%S')
でタイムゾーン情報を削除- カラム名のチェックを行い、エラーを防止
カラム名の違いによるエラーを防ぐため、print(df.columns.tolist())
で事前に確認することが重要です。
8. さらに便利な使い方
- スクリプトを関数化して、他のプロジェクトでも使いやすくする
argparse
を使って、コマンドライン引数でファイル名を指定できるようにする- 他のタイムゾーン(PST, EST, GMT など)にも対応する
コメント