Pandas は、Python プログラミング言語向けに開発されたデータ操作・分析用ソフトウェアライブラリです(三条項 BSD ライセンス)。特に数値テーブルや時系列データの操作のためのデータ構造と演算を提供しています。Pandas という名称は、経済計量学における「パネルデータ」という用語に由来しています。また「Pythonデータ分析」という語句をもじったものともされています 。Pandas により、R 言語で利用可能な DataFrame 操作の多くの同等の機能が Python でも利用できるようになりました。Pandas は NumPy を基盤として構築されています。
タイムゾーンにいつも苦しむ UNIX秒
UNIX 時間(エポック秒)は、UTC(協定世界時)の 1970 年 1 月 1 日 0 時 0 分 0 秒からの経過秒数です。本記事では「UNIX秒」と呼ぶことにします。
リアルタイムのデータを扱う時、取得したデータのタイムスタンプを UNIX秒 に直して保持するようにしています。あとになって分析などをする際に表示用に時刻フォーマットをするのですがタイムゾーンが合っていません。そんなときにいつも、その場しのぎの対処をしてしまっています。
分析やチャート作成時にタイムゾーンの情報は必要ないのですが、UNIX秒をタイムゾーンが付いていないローカル時刻表記に戻す時には、一旦はタイムゾーン付きの処理、変換をしてから、タイムゾーンの情報を削除する、という流れが確実です。
Pandas の Series で .dt アクセサを利用すれば一括処理が可能なので、サンプルでは一つの時刻(UNIX秒)しか扱いませんが、わざわざ Series にしてローカル時刻へ変換する処理の流れをまとめました。丁寧に言葉でくどくど説明しても解りにくいので、コードの簡単なコメントで済ませてしまっています。
import time
import pandas as pd
print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print("UNIX秒からローカル時刻へ変換する流れ")
print("UNIX秒 → UTC (tz-aware) → JST (tz-aware) → tz-naive")
print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print("\nUNIX秒: 現在のUNIX秒を取得")
ts_epoch = time.time()
print(ts_epoch)
print("\nUNIX秒 → tz-naive: Pandas の Timestamp(utc=True 指定無し)→ Series へ ☹")
dt_no_utc = pd.to_datetime(ts_epoch, unit="s")
ser_no_utc = pd.Series([dt_no_utc])
print(ser_no_utc)
print("\n*** .dt アクセサを使った変換[備忘録] ***")
print("UNIX秒 → UTC (tz-aware): Pandas の Timestamp(タイムゾーン付き)→ Series へ")
dt_utc = pd.to_datetime(ts_epoch, unit="s", utc=True)
ser_utc = pd.Series([dt_utc])
print(ser_utc)
print("\nUTC (tz-aware) → JST (tz-aware): タイムゾーンを日本時間に変更")
ser_jst = ser_utc.dt.tz_convert("Asia/Tokyo")
print(ser_jst)
print("\nJST (tz-aware) → tz-naive: タイムゾーン情報を削除")
ser_no_tz = ser_jst.dt.tz_localize(None)
print(ser_no_tz)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ UNIX秒からローカル時刻へ変換する流れ UNIX秒 → UTC (tz-aware) → JST (tz-aware) → tz-naive ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ UNIX秒: 現在のUNIX秒を取得 1768363958.6145868 UNIX秒 → tz-naive: Pandas の Timestamp(utc=True 指定無し)→ Series へ ☹ 0 2026-01-14 04:12:38.614586830 dtype: datetime64[ns] *** .dt アクセサを使った変換[備忘録] *** UNIX秒 → UTC (tz-aware): Pandas の Timestamp(タイムゾーン付き)→ Series へ 0 2026-01-14 04:12:38.614586830+00:00 dtype: datetime64[ns, UTC] UTC (tz-aware) → JST (tz-aware): タイムゾーンを日本時間に変更 0 2026-01-14 13:12:38.614586830+09:00 dtype: datetime64[ns, Asia/Tokyo] JST (tz-aware) → tz-naive: タイムゾーン情報を削除 0 2026-01-14 13:12:38.614586830 dtype: datetime64[ns]
参考サイト
にほんブログ村
#オープンソース
