パフォーマンス プロファイリングを実行したところ、パフォーマンスにpd.to_datetime
大きな影響を与えていることがわかり、非常に驚きました (私のユース ケースでは 91 秒のうち 62 秒が費やされました)。そのため、機能を適切に使用していない可能性があります。
簡単な例timestamp = 623289600000000000L
では、日付/タイムスタンプ形式に変換する必要があります。
import datetime
import time
import pandas as pd
timestamp = 623289600000000000L
timeit pd.to_datetime(timestamp, unit = 'ns')
10000 loops, best of 3: 46.9 us per loop
In [3]: timeit time.ctime(timestamp/10**9)
1000000 loops, best of 3: 904 ns per loop
timeit time.localtime(timestamp/10**9)
1000000 loops, best of 3: 1.13 us per loop
timeit datetime.datetime.fromtimestamp(timestamp/10**9)
1000000 loops, best of 3: 1.51 us per loop
timeit datetime.datetime.utcfromtimestamp(timestamp/10**9)
1000000 loops, best of 3: 1.29 us per loop
これらの関数はそれぞれ異なるオブジェクトを返しますpd.to_datetime
が、はるかに遅いことは承知しています。それは期待されていますか?
私は今datetime.datetime.utcfromtimestamp
自分のコードで使用していますが、正常に動作します。ただし、Pandas を使い続けたいと思います。さらに、Pandas は 1970 年より前の日付を適切に処理します (以下を参照)。どなたかご指南いただけないでしょうか。
pd.to_datetime
1 つの利点があります。負の入力/1970-01-01 より前の日付をサポートすることです。これは、私のユースケースでも非常に重要です。
timestamp =-445645400000000000L
pd.to_datetime(timestamp, unit = 'ns')
Timestamp('1955-11-18 01:36:40', tz=None)
datetime.datetime.utcfromtimestamp(timestamp/10**9)
Traceback (most recent call last):
File "<ipython-input-9-99b040d30a3e>", line 1, in <module>
datetime.datetime.utcfromtimestamp(timestamp/10**9)
ValueError: timestamp out of range for platform localtime()/gmtime() function
Windows 7 で Python 2.7.5 と Pandas 0.12.0 を使用しています。