パンダで DataFrame 列を日時に変換する方法

  1. DataFrame 列を datetime に変換する Pandas の to_datetime 関数
  2. DataFrame 列を Datetime に変換する DataFrame apply メソッド
  3. DataFrame 列を日時のパフォーマンス比較に変換する方法

Pandas DataFrame 列を Python 日時に変換する方法を紹介します。

  • パンダの to_datetime() 関数
  • 列内の要素を操作する DataFrame の apply メソッド

この記事では、以下と同じ DataFrame を使用します。

>>> from datetime import datetime, timedelta
>>> from pandas import DataFrame
>>> df = DataFrame.from_items(
    [('Alfa', [1, 2, 3]), 
     ('Bravo', [4, 5, 6]), 
     ('Datetime', [datetime.strftime(datetime.now()-timedelta(days=_), "%m/%d/%Y, %H:%M:%S") for _ in range(3)])], 
    orient='index', 
    columns=['A', 'B', 'C']).T
>>> df
  Alfa Bravo              Datetime
A    1     4  12/07/2019, 14:08:55
B    2     5  12/06/2019, 14:08:55
C    3     6  12/05/2019, 14:08:55

DataFrame 列を datetime に変換する Pandas の to_datetime 関数

Pandas to_datetime 関数は、指定された引数を datetime に変換します。

pandas.to_datetime(param, format="")

形式は、日時文字列のパターンを指定します。Python の datetime モジュールの stftime または strptime のフォーマットと同じです。

>>> df
  Alfa Bravo              Datetime
A    1     4  12/07/2019, 14:08:55
B    2     5  12/06/2019, 14:08:55
C    3     6  12/05/2019, 14:08:55
>>> df['Datetime'] = pd.to_datetime(df['Datetime'], format="%m/%d/%Y, %H:%M:%S")
>>> df
  Alfa Bravo            Datetime
A    1     4 2019-12-07 14:08:55
B    2     5 2019-12-06 14:08:55
C    3     6 2019-12-05 14:08:55

to_datetime() 関数は DataFrame データをその場で変更しません。したがって、返された PandasSeries を特定の DataFrame カラムに割り当てる必要があります。

to_datetime() 関数は日時に変換するのが賢明です

to_datetime() 関数は、datetime フォーマット文字列を指定せずにスマートな方法で datetime への変換を行うことができます。文字列パターンを自動的かつスマートに検出します。

>>> df['Datetime'] = pd.to_datetime(df['Datetime'])
>>> df
  Alfa Bravo            Datetime
A    1     4 2019-12-07 14:08:55
B    2     5 2019-12-06 14:08:55
C    3     6 2019-12-05 14:08:55
警告

to_datetimeformat を賢く与えることなく仕事をすることができますが、変換速度は format が与えられたときよりもはるかに遅くなります。

format 文字列を指定せずに日時文字列の形式を推測できる場合、to_datetime のオプション infer_datetime_formatTrue に設定して、変換をより高速なモードに切り替えることができます。

解析速度が 5〜6 倍になる可能性があります。

DataFrame 列を Datetime に変換する DataFrame apply メソッド

apply(func, *args, **kwds)

DataFrameapply メソッドは、各列または行に関数 func を適用します。

簡単にするために、func の代わりに lambda 関数を使用できます。

>>> df['Datetime'] = df['Datetime'].apply(lambda _: datetime.strptime(_,"%m/%d/%Y, %H:%M:%S"))
		   
>>> df
		   
  Alfa Bravo            Datetime
A    1     4 2019-12-07 14:44:35
B    2     5 2019-12-06 14:44:35
C    3     6 2019-12-05 14:44:35

DataFrame 列を日時のパフォーマンス比較に変換する方法

timeit を使用して、この記事で紹介した両方の方法のタイミングパフォーマンスを比較しましょう。

In [1]: %timeit pd.to_datetime(df['Datetime'], format="%m/%d/%Y, %H:%M:%S")
452 µs ± 85.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [2]: %timeit df['Datetime'].apply(lambda _: datetime.strptime(_,"%m/%d/%Y, %H:%M:%S"))
377 µs ± 58.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

apply メソッドは Pandas ネイティブのto_datetime メソッドよりもわずかに優れており、to_datetime 関数の実行時間の約 80%を占めています。

関連記事 - Pandas DataFrame

  • Pandas DataFrame の列ヘッダーをリストとして取得する方法
  • Pandas DataFrame 列を削除する方法
  • 関連記事 - Pandas DataFrame Column

  • Pandas DataFrame の列ヘッダーをリストとして取得する方法
  • Pandas DataFrame 列を削除する方法
  • Pandas DataFrame の列ヘッダーをリストとして取得する方法
  • Pandas DataFrame 列を削除する方法
  • 関連記事 - Python datetime

  • Pandas DataFrame の列ヘッダーをリストとして取得する方法
  • Pandas DataFrame 列を削除する方法
  • Pandas DataFrame の列ヘッダーをリストとして取得する方法
  • Pandas DataFrame 列を削除する方法
  • Python で現在の時刻を取得する方法
  • Python が文字列を日時 datetime に変換する方法
  • comments powered by Disqus