Pandas pd.Timestamp() 関数
pd.Timestamp()は Pandas ライブラリでタイムスタンプを作成するための関数です。多様な形式の日時入力を受け付け、正確な Timestamp オブジェクトを返します。
Timestamp は、Pandas において単一の時点を表すデータ型であり、Python 標準ライブラリの datetime.datetime を拡張したもので、より豊富な機能と優れたパフォーマンスを提供します。
単語の意味: Timestamp「タイムスタンプ」という意味で、特定の時刻を表します。
基本構文とパラメータ
pd.Timestamp()は Pandas ライブラリのトップレベル関数で、正確なタイムスタンプオブジェクトの作成に使用されます。
構文形式
pd.Timestamp(year=None, month=None, day=None, hour=None, minute=None, second=None, microsecond=None, nanosecond=None, tzinfo=None, freq=None) pd.Timestamp(value)
パラメータの説明
| パラメータ | 型 | 必須かどうか | 説明 | デフォルト値 |
|---|---|---|---|---|
| value | 文字列、datetime、int、float | 任意 | 変換する時間値。 | None |
| year | 整数 | 任意 | 年(4桁の数字)。 | None |
| month | 整数 | 任意 | 月(1〜12)。 | None |
| day | 整数 | 任意 | 日(1〜31)。 | None |
| hour | 整数 | 任意 | 時(0〜23)。 | None |
| minute | 整数 | 任意 | 分(0〜59)。 | None |
| second | 整数 | 任意 | 秒(0〜59)。 | None |
| microsecond | 整数 | 任意 | マイクロ秒(0〜999999)。 | None |
| nanosecond | 整数 | 任意 | ナノ秒(0〜999999)。 | None |
| tz | 文字列または tzinfo | 任意 | タイムゾーン情報。例:'UTC'、'Asia/Shanghai'。 | None |
戻り値の説明
- 戻り値: datetime.datetime に似た Timestamp オブジェクトを返します。
- 効果: さまざまな形式の時間データを正確な Pandas タイムスタンプに変換します。
例
簡単なものから複雑なものまで一連の例を通して、徹底的にpd.Timestamp()使い方をマスターしましょう。
例1:基本の使い方 - タイムスタンプの作成
例
import pandas as pd
# 1. 文字列を使用してタイムスタンプを作成
print("=== 文字列でタイムスタンプ作成 ===")
ts1 = pd.Timestamp('2023-01-01')
print(f"pd.Timestamp('2023-01-01'): {ts1}")
ts2 = pd.Timestamp('2023-01-01 12:30:45')
print(f"pd.Timestamp('2023-01-01 12:30:45'): {ts2}")
ts3 = pd.Timestamp('2023-05-15 08:00:00.123456')
print(f"マイクロ秒付き: {ts3}")
# 2. キーワード引数を使用してタイムスタンプを作成
print("n=== キーワード引数で作成 ===")
ts4 = pd.Timestamp(year=2023, month=6, day=15, hour=10, minute=30)
print(f"pd.Timestamp(year=2023, month=6, day=15, hour=10, minute=30): {ts4}")
# 3. datetime オブジェクトから作成
print("n=== datetime オブジェクトから作成 ===")
import datetime
dt = datetime.datetime(2023, 8, 20, 14, 45, 30)
ts5 = pd.Timestamp(dt)
print(f"datetime から作成: {ts5}")
# 4. タイムスタンプの属性を表示
print("n=== タイムスタンプの属性 ===")
ts = pd.Timestamp('2023-03-15 10:30:45.123456')
print(f"タイムスタンプ: {ts}")
print(f"年: {ts.year}")
print(f"月: {ts.month}")
print(f"日: {ts.day}")
print(f"時: {ts.hour}")
print(f"分: {ts.minute}")
print(f"秒: {ts.second}")
print(f"マイクロ秒: {ts.microsecond}")
print(f"曜日 (0=月曜日): {ts.dayofweek}")
print(f"四半期: {ts.quarter}")
# 1. 文字列を使用してタイムスタンプを作成
print("=== 文字列でタイムスタンプ作成 ===")
ts1 = pd.Timestamp('2023-01-01')
print(f"pd.Timestamp('2023-01-01'): {ts1}")
ts2 = pd.Timestamp('2023-01-01 12:30:45')
print(f"pd.Timestamp('2023-01-01 12:30:45'): {ts2}")
ts3 = pd.Timestamp('2023-05-15 08:00:00.123456')
print(f"マイクロ秒付き: {ts3}")
# 2. キーワード引数を使用してタイムスタンプを作成
print("n=== キーワード引数で作成 ===")
ts4 = pd.Timestamp(year=2023, month=6, day=15, hour=10, minute=30)
print(f"pd.Timestamp(year=2023, month=6, day=15, hour=10, minute=30): {ts4}")
# 3. datetime オブジェクトから作成
print("n=== datetime オブジェクトから作成 ===")
import datetime
dt = datetime.datetime(2023, 8, 20, 14, 45, 30)
ts5 = pd.Timestamp(dt)
print(f"datetime から作成: {ts5}")
# 4. タイムスタンプの属性を表示
print("n=== タイムスタンプの属性 ===")
ts = pd.Timestamp('2023-03-15 10:30:45.123456')
print(f"タイムスタンプ: {ts}")
print(f"年: {ts.year}")
print(f"月: {ts.month}")
print(f"日: {ts.day}")
print(f"時: {ts.hour}")
print(f"分: {ts.minute}")
print(f"秒: {ts.second}")
print(f"マイクロ秒: {ts.microsecond}")
print(f"曜日 (0=月曜日): {ts.dayofweek}")
print(f"四半期: {ts.quarter}")
実行結果:
=== 字符串创建时间戳 ===
pd.Timestamp('2023-01-01'): 2023-01-01 00:00:00
pd.Timestamp('2023-01-01 12:30:45'): 2023-01-01 12:30:45
带微秒: 2023-05-15 08:00:00.123456
=== 关键字参数创建 ===
pd.Timestamp(year=2023, month=6, day=15, hour=10, minute=30): 2023-06-15 10:30:00
=== datetime 对象创建 ===
从 datetime 创建: 2023-08-20 14:45:30
=== 时间戳属性 ===
时间戳: 2023-03-15 10:30:45.123456
年份: 2023
月份: 3
日期: 15
小时: 10
分钟: 30
秒: 45
微秒: 123456
星期几 (0=周一): 2
季度: 1
コードの解説:
pd.Timestamp()文字列や datetime オブジェクトなど、さまざまな形式の入力を受け付けることができます。- タイムスタンプは、日時の各部分を取得するための豊富な属性を提供します。
dayofweek0〜6を返し、0は月曜日を表します。
例2:タイムゾーンの処理
例
import pandas as pd
# 1. タイムゾーン付きタイムスタンプの作成
print("=== タイムゾーン付きタイムスタンプの作成 ===")
ts_utc = pd.Timestamp('2023-01-01 12:00:00', tz='UTC')
print(f"UTC タイムゾーン: {ts_utc}")
ts_shanghai = pd.Timestamp('2023-01-01 20:00:00', tz='Asia/Shanghai')
print(f"上海タイムゾーン: {ts_shanghai}")
# 2. 異なるタイムゾーン間の変換
print("n=== タイムゾーン変換 ===")
ts_utc = pd.Timestamp('2023-01-01 12:00:00', tz='UTC')
ts_local = ts_utc.tz_convert('Asia/Shanghai')
print(f"UTC 時間: {ts_utc}")
print(f"上海に変換: {ts_local}")
# 3. ローカルタイムゾーンのタイムスタンプを作成(タイムゾーンなし→あり)
print("n=== ローカル時間をタイムゾーン付きに変換 ===")
ts_naive = pd.Timestamp('2023-01-01 12:00:00')
print(f"タイムゾーンなし: {ts_naive}")
ts_aware = ts_naive.tz_localize('Asia/Shanghai')
print(f"上海タイムゾーンを追加: {ts_aware}")
# 4. tz パラメータの短縮形を使用
print("n=== タイムゾーンの短縮形 ===")
ts1 = pd.Timestamp('2023-01-01 12:00', tz='US/Eastern')
print(f"米国東部: {ts1}")
ts2 = pd.Timestamp('2023-01-01 12:00', tz='Europe/London')
print(f"ロンドン: {ts2}")
# 1. タイムゾーン付きタイムスタンプの作成
print("=== タイムゾーン付きタイムスタンプの作成 ===")
ts_utc = pd.Timestamp('2023-01-01 12:00:00', tz='UTC')
print(f"UTC タイムゾーン: {ts_utc}")
ts_shanghai = pd.Timestamp('2023-01-01 20:00:00', tz='Asia/Shanghai')
print(f"上海タイムゾーン: {ts_shanghai}")
# 2. 異なるタイムゾーン間の変換
print("n=== タイムゾーン変換 ===")
ts_utc = pd.Timestamp('2023-01-01 12:00:00', tz='UTC')
ts_local = ts_utc.tz_convert('Asia/Shanghai')
print(f"UTC 時間: {ts_utc}")
print(f"上海に変換: {ts_local}")
# 3. ローカルタイムゾーンのタイムスタンプを作成(タイムゾーンなし→あり)
print("n=== ローカル時間をタイムゾーン付きに変換 ===")
ts_naive = pd.Timestamp('2023-01-01 12:00:00')
print(f"タイムゾーンなし: {ts_naive}")
ts_aware = ts_naive.tz_localize('Asia/Shanghai')
print(f"上海タイムゾーンを追加: {ts_aware}")
# 4. tz パラメータの短縮形を使用
print("n=== タイムゾーンの短縮形 ===")
ts1 = pd.Timestamp('2023-01-01 12:00', tz='US/Eastern')
print(f"米国東部: {ts1}")
ts2 = pd.Timestamp('2023-01-01 12:00', tz='Europe/London')
print(f"ロンドン: {ts2}")
実行結果:
=== 创建带时区的时间戳 === UTC 时区: 2023-01-01 12:00:00+00:00 上海时区: 2023-01-01 20:00:00+08:00 === 时区转换 === UTC 时间: 2023-01-01 12:00:00+00:00 转换到上海: 2023-01-01 20:00:00+08:00 === 本地时间转带时区 === 无时区: 2023-01-01 12:00:00 添加上海时区: 2023-01-01 12:00:00+08:00 === 时区简写 === 美国东部: 2023-01-01 12:00:00-05:00 伦敦: 2023-01-01 12:00:00+00:00
コードの解説:
tz_localizeタイムゾーンのない Timestamp にタイムゾーン情報を追加するために使われます。tz_convert異なるタイムゾーン間で変換するために使われます。
例3:タイムスタンプの比較と演算
例
import pandas as pd
# 1. タイムスタンプの比較
print("=== タイムスタンプの比較 ===")
ts1 = pd.Timestamp('2023-01-01')
ts2 = pd.Timestamp('2023-01-15')
ts3 = pd.Timestamp('2023-01-01')
print(f"ts1: {ts1}")
print(f"ts2: {ts2}")
print(f"ts1 < ts2: {ts1 < ts2}")
print(f"ts1 == ts3: {ts1 == ts3}")
print(f"ts1 != ts2: {ts1 != ts2}")
# 2. タイムスタンプと Timedelta の演算
print("n=== タイムスタンプと時間差の演算 ===")
ts = pd.Timestamp('2023-01-01 12:00:00')
td = pd.Timedelta(days=5, hours=3)
print(f"元のタイムスタンプ: {ts}")
print(f"時間差: {td}")
print(f"ts + td: {ts + td}")
print(f"ts - td: {ts - td}")
# 3. 2つのタイムスタンプを減算して Timedelta を取得
print("n=== 2つのタイムスタンプの減算 ===")
ts1 = pd.Timestamp('2023-01-15 18:00:00')
ts2 = pd.Timestamp('2023-01-10 09:00:00')
diff = ts1 - ts2
print(f"ts1: {ts1}")
print(f"ts2: {ts2}")
print(f"ts1 - ts2: {diff}")
print(f"日数: {diff.days}")
print(f"時: {diff.seconds / 3600}")
# 4. DataFrame でのタイムスタンプの使用
print("n=== DataFrame 内のタイムスタンプ ===")
df = pd.DataFrame({
'event': ['event_a', 'event_b', 'event_c'],
'timestamp': [
pd.Timestamp('2023-01-01 10:00:00'),
pd.Timestamp('2023-01-02 15:30:00'),
pd.Timestamp('2023-01-03 09:45:00')
]
})
print(df)
print(f"nイベントの継続時間(最初のイベントからの相対):")
df['relative_days'] = (df['timestamp'] - df['timestamp'].iloc[0]).dt.days
print(df)
# 1. タイムスタンプの比較
print("=== タイムスタンプの比較 ===")
ts1 = pd.Timestamp('2023-01-01')
ts2 = pd.Timestamp('2023-01-15')
ts3 = pd.Timestamp('2023-01-01')
print(f"ts1: {ts1}")
print(f"ts2: {ts2}")
print(f"ts1 < ts2: {ts1 < ts2}")
print(f"ts1 == ts3: {ts1 == ts3}")
print(f"ts1 != ts2: {ts1 != ts2}")
# 2. タイムスタンプと Timedelta の演算
print("n=== タイムスタンプと時間差の演算 ===")
ts = pd.Timestamp('2023-01-01 12:00:00')
td = pd.Timedelta(days=5, hours=3)
print(f"元のタイムスタンプ: {ts}")
print(f"時間差: {td}")
print(f"ts + td: {ts + td}")
print(f"ts - td: {ts - td}")
# 3. 2つのタイムスタンプを減算して Timedelta を取得
print("n=== 2つのタイムスタンプの減算 ===")
ts1 = pd.Timestamp('2023-01-15 18:00:00')
ts2 = pd.Timestamp('2023-01-10 09:00:00')
diff = ts1 - ts2
print(f"ts1: {ts1}")
print(f"ts2: {ts2}")
print(f"ts1 - ts2: {diff}")
print(f"日数: {diff.days}")
print(f"時: {diff.seconds / 3600}")
# 4. DataFrame でのタイムスタンプの使用
print("n=== DataFrame 内のタイムスタンプ ===")
df = pd.DataFrame({
'event': ['event_a', 'event_b', 'event_c'],
'timestamp': [
pd.Timestamp('2023-01-01 10:00:00'),
pd.Timestamp('2023-01-02 15:30:00'),
pd.Timestamp('2023-01-03 09:45:00')
]
})
print(df)
print(f"nイベントの継続時間(最初のイベントからの相対):")
df['relative_days'] = (df['timestamp'] - df['timestamp'].iloc[0]).dt.days
print(df)
実行結果:
=== 时间戳比较 ===
ts1: 2023-01-01 00:00:00
ts2: 2023-01-15 00:00:00
ts1 < ts2: True
ts1 == ts3: True
ts1 != ts2: True
=== 时间戳与时间差运算 ===
原时间戳: 2023-01-01 12:00:00
时间差: 5 days 03:00:00
ts + td: 2023-01-06 15:00:00
ts - td: 2022-12-27 09:00:00
=== 两个时间戳相减 ===
ts1: 2023-01-15 18:00:00
ts2: 2023-01-10 09:00:00
ts1 - ts2: 5 days 09:00:00
天数: 5
小时: 9.0
=== DataFrame 中的时间戳 ===
event timestamp
0 event_a 2023-01-01 10:00:00
1 event_b 2023-01-02 15:30:00
2 event_c 2023-01-03 09:45:00
事件持续时间(相对于第一个事件):
event timestamp relative_days
0 event_a 2023-01-01 10:00:00 0
1 event_b 2023-01-02 15:30:00 1
2 event_c 2023-01-03 09:45:00 2
コードの解説:
- タイムスタンプは直接の比較演算(<, ==, !=)をサポートします。
- タイムスタンプと Timedelta の加算または減算により、新しいタイムスタンプまたは時間差が得られます。
- 2つのタイムスタンプを減算すると、Timedelta オブジェクトが得られます。
- DataFrame では、時間に関連する計算を簡単に行うことができます。
注意事項
重要な注意:
pd.TimestampPython の datetime に似ていますが、より高いパフォーマンスとより多くのメソッドを提供します。- タイムスタンプオブジェクトは不変であり、変更操作を行うと新しいオブジェクトが返されます。
- タイムゾーン情報は作成時に指定するのが最善で、後から変更すると曖昧さが生じる可能性があります。
- 使用
pd.NaT(Not a Time)は欠損している時間値を表します。
その他の拡張
Pandas でよく使われる関数