Pandas pd.to_datetime() 関数

Pandas 通用函数Pandas よく使う関数


pd.to_datetime()はPandasライブラリで使用されるデータを日時型に変換するための関数です。文字列、Unixタイムスタンプなど様々な形式のデータをPandasのdatetime64型に変換できます。

日時処理はデータ分析における一般的なタスクであり、datetime型に変換すると、日付の抽出、時間演算、タイムゾーン処理などの操作を簡単に行えます。

単語の意味: to_datetime「日時に変換する」という意味で、様々な形式の時間データを標準のdatetimeオブジェクトに統一変換します。


基本構文とパラメータ

pd.to_datetime()はPandasライブラリのトップレベル関数で、様々な形式の時間データをdatetime型に変換するために使用します。

構文形式

pd.to_datetime(arg, errors='raise', dayfirst=False, yearfirst=False, utc=False, format=None, unit='ns')

パラメータの説明

パラメータ型説明
arg整数、浮動小数点数、文字列、datetime、リスト、Series日時型に変換するデータ。
errors文字列エラー処理方法:'raise'(デフォルト)は例外を発生、'coerce'はNaTに変換、'ignore'は元のデータを返す。
dayfirstブール値Trueの場合、日が月の前に来ます(例:01/02/2023 は2日を表す)。
utcブール値Trueの場合、UTCタイムゾーンのdatetimeを返します。
format文字列日時形式を指定します。例:'%Y-%m-%d'。
unit文字列argが数値の場合、単位を指定します:'D', 's', 'ms', 'us', 'ns'。

戻り値の説明

  • 戻り値: datetime64型のSeriesを返します。
  • 効果: 入力データをPandasのdatetime型に変換し、日時操作を容易にします。

例

簡単なものから複雑なものまで一連の例を通して、pd.to_datetime()の使い方を完全にマスターしましょう。

例1:基本の使い方 - 文字列を日時へ変換する

例

import pandas as pd

# 1. 日時文字列のSeriesを作成
dates = pd.Series([
    '2023-01-01',
    '2023-01-02',
    '2023-01-03',
    '2023-01-04',
    '2023-01-05'
])

print("=== 元のSeries(型:", dates.dtype, ")===")
print(dates)

# 2. pd.to_datetime() を使用して日時型に変換
result = pd.to_datetime(dates)
print("\n=== pd.to_datetime() 変換後(型:", result.dtype, ")===")
print(result)

# 3. 複数の形式に対応
dates_mixed = pd.Series([
    '2023-01-01',
    '2023/02/03',
    '01.04.2023',
    '2023年05月06日'
])
print("\n=== 複数形式の自動解析 ===")
print(pd.to_datetime(dates_mixed))

# 4. 時刻情報を含む
dates_with_time = pd.Series([
    '2023-01-01 12:30:45',
    '2023-02-03 08:15:30'
])
result_datetime = pd.to_datetime(dates_with_time)
print("\n=== 時刻情報を含む ===")
print(result_datetime)

実行結果:

=== 原始 Series(类型: object )===
0    2023-01-01
1    2023-01-02
2    2023-01-03
3    2023-01-04
4    2023-01-05
dtype: object

=== pd.to_datetime() 转换后(类型: datetime64[ns] )===
0   2023-01-01 00:00:00
1   2023-01-02 00:00:00
2   2023-01-03 00:00:00
3   2023-01-04 00:00:00
4   2023-01-05 00:00:00

=== 多种格式自动解析 ===
0   2023-01-01 00:00:00
1   2023-02-03 00:00:00
2   2023-04-01 00:00:00
3   2023-05-06 00:00:00

=== 包含时间的信息 ===
0   2023-01-01 12:30:45
1   2023-02-03 08:15:30

コード解説:

  1. pd.to_datetime()一般的な日時形式を自動的に認識できます。
  2. 入力が日付のみの場合でも、時刻部分はデフォルトで00:00:00に設定されます。
  3. 中国語、ドット、スラッシュなど様々な区切り文字を含む日付形式を処理できます。

例2:異なる日付形式とdayfirstパラメータの処理

地域によって異なる日付形式には、dayfirstパラメータまたはformatパラメータを使用できます。

例

import pandas as pd

# 1. ヨーロッパ形式の日付(月/日/年)
europe_dates = pd.Series(['01/02/2023', '02/03/2023', '03/04/2023'])

print("=== ヨーロッパ形式の日付(01/02/2023 を2日として解釈)===")
print("デフォルト(月/日/年):", pd.to_datetime(europe_dates).dt.day.tolist())
print("dayfirst=True:", pd.to_datetime(europe_dates, dayfirst=True).dt.day.tolist())

# 2. formatパラメータを使用して具体的な形式を指定
print("\n=== formatパラメータの使用 ===")
result = pd.to_datetime('2023-06-15 14:30:00', format='%Y-%m-%d %H:%M:%S')
print(f"変換結果: {result}")

# 3. 複雑な形式の解析
complex_dates = pd.Series(['2023年12月25日', '15/08/2023', '2023-05-01'])
print("\n=== 混合形式の自動解析 ===")
print(pd.to_datetime(complex_dates, dayfirst=True))

実行結果:

=== 欧洲格式日期(01/02/2023 理解为 2 号)===
默认: [1, 2, 3]
dayfirst=True: [2, 3, 4]

=== 使用 format 参数 ===
转换结果: 2023-06-15 14:30:00

=== 混合格式自动解析 ===
0   2023-12-25 00:00:00
1   2023-08-15 00:00:00
2   2023-05-01 00:00:00

コード解説:

  • formatパラメータで具体的な形式を指定すると、Pandasに日付の解析方法を明確に伝え、曖昧さを避けられます。
  • 自動解析の能力は高いですが、曖昧な場合(01/02/2023の解釈など)は、dayfirst 或 formatパラメータで明確に指定する必要があります。

例3:Unixタイムスタンプを日時へ変換する

データベースやシステムからエクスポートされたタイムスタンプは、unitパラメータで変換できます。

例

import pandas as pd

# 1. Unixタイムスタンプ(秒)
timestamps = pd.Series([1672531200, 1672617600, 1672704000])

print("=== Unixタイムスタンプ(秒)===")
print(timestamps.values)

# 2. 日時に変換
result = pd.to_datetime(timestamps, unit='s')
print("\n=== pd.to_datetime(..., unit='s') 変換後 ===")
print(result)

# 3. Unixタイムスタンプ(ミリ秒)
timestamps_ms = pd.Series([1672531200000, 1672617600000, 1672704000000])
result_ms = pd.to_datetime(timestamps_ms, unit='ms')
print("\n=== ミリ秒タイムスタンプ ===")
print(result_ms)

# 4. 固定の原点から変換
print("\n=== 2023-01-01 からの計算 ===")
days = pd.Series([0, 1, 2, 3, 4])
result_origin = pd.to_datetime(days, origin='2023-01-01', unit='D')
print(result_origin)

実行結果:

=== Unix 时间戳(秒)===
[1672531200 1672617600 1672704000]

=== pd.to_datetime(..., unit='s') 转换后 ===
0   2023-01-01 00:00:00
1   2023-01-02 00:00:00
2   2023-01-03 00:00:00

=== 毫秒级时间戳 ===
0   2023-01-01 00:00:00
1   2023-01-02 00:00:00
2   2023-01-03 00:00:00

=== 从 2023-01-01 开始计算 ===
0   2023-01-01
1   2023-01-02
2   2023-01-03
3   2023-01-04
4   2023-01-05

コード解説:

  • unit='s'数値の単位が秒(Unixタイムスタンプ)であることを示します。
  • unit='ms'ミリ秒タイムスタンプを示します。
  • originパラメータで開始時間を指定でき、相対時間の計算に使用できます。

例4:errorsパラメータで無効な日付を処理する

例

import pandas as pd
import numpy as np

# 1. 無効な日付を含むSeries
mixed_dates = pd.Series(['2023-01-01', '2023-02-30', 'invalid', '2023-03-15'])

print("=== 無効な日付を含むSeries ===")
print(mixed_dates)

# 2. errors='raise'(デフォルト)- 例外を発生
print("\n=== errors='raise' ===")
try:
    pd.to_datetime(mixed_dates, errors='raise')
except Exception as e:
    print(f"例外: {type(e).__name__}")

# 3. errors='coerce' - 無効な日付をNaTに変換
print("\n=== errors='coerce' ===")
result = pd.to_datetime(mixed_dates, errors='coerce')
print(result)

# 4. errors='ignore' - そのまま保持
print("\n=== errors='ignore' ===")
result_ignore = pd.to_datetime(mixed_dates, errors='ignore')
print(result_ignore)
print(f"型: {result_ignore.dtype}")

実行結果:

=== 包含无效日期的 Series ===
0    2023-01-01
1    2023-02-30
2    invalid
3    2023-03-15

=== errors='raise' ===
异常: OutOfBoundsDatetime

=== errors='coerce' ===
0   2023-01-01 00:00:00
1                    NaT
2                    NaT
3   2023-03-15 00:00:00

=== errors='ignore' ===
0    2023-01-01
1    2023-02-30
2    invalid
3    2023-03-15
dtype: object

コード解説:

  • errors='coerce'無効な日付や解析できない値をNaT(Not a Time、欠損値と同等)に変換します。
  • これはダーティデータを処理する際に非常に便利で、データ処理の連続性を維持できます。

注意事項

重要なヒント:

  • データにdatetimeの範囲を超える値がある場合、OutOfBoundsDatetime例外が発生します。
  • formatパラメータで日付形式を明確に指定できるため、大量のデータを処理する際はパフォーマンス向上のために使用することをお勧めします。
  • 変換後のdatetimeオブジェクトは、.dtアクセサを使用して豊富な日時操作を行うことができます。
  • タイムゾーン処理にはpytzライブラリのインストールが必要です。

Python math 模块Pandas よく使う関数

その他の拡張