Pandas で DataFrame 列を日時に変換する方法
-
DataFrame 列を
datetime
に変換する Pandas のto_datetime
関数 -
DataFrame 列を Datetime に変換する DataFrame
apply
メソッド - DataFrame 列を日時のパフォーマンス比較に変換する方法
Pandas DataFrame 列を Python 日時に変換する方法を紹介します。
- Pandas の
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
データをその場で変更しません。したがって、返された Pandas Series
を特定の 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_datetime
は format
を賢く与えることなく仕事をすることができますが、変換速度は format
が与えられたときよりもはるかに遅くなります。
format
文字列を指定せずに日時文字列の形式を推測できる場合、to_datetime
のオプション infer_datetime_format
を True
に設定して、変換をより高速なモードに切り替えることができます。
解析速度が 5〜6 倍になる可能性があります。
DataFrame 列を Datetime に変換する DataFrame apply
メソッド
apply(func, *args, **kwds)
DataFrame
の apply
メソッドは、各列または行に関数 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 で浮動小数点数 float を整数 int に変換する方法
- Pandas DataFrame を 1つの列の値で並べ替える方法
- Pandas group-by と Sum の集計を取得する方法
関連記事 - Pandas DataFrame Column
- Pandas DataFrame の列ヘッダーをリストとして取得する方法
- Pandas DataFrame 列を削除する方法
- Pandas 列の合計を取得する方法
- Pandas DataFrame 列の順序を変更する方法
- Pandas で DataFrame 列を文字列に変換する方法