2015-07-10 75 views
3

我有一個包含許多行數據的文本文件 - 每行中的第一條數據是一個unix時間戳,例如1436472000。我正在使用numpy.loadtxt,並且在我想指定的轉換器的參數中將時間戳轉換爲任何numpy可以理解的日期時間。我知道這需要在大括號內的0:之後,但我無法弄清楚如何轉換它。我知道一個轉換器可以從matplotlib.dates.strpdate2num用於正常日期,但我不會爲unix時間戳工作。Python Numpy Loadtxt - 轉換unix時間戳

代碼:

timestamp, closep, highp, lowp, openp, volume = np.loadtxt(fileName,delimiter=",",unpack=True,converters={ 0: }) 

感謝您的幫助提前,請問如果你想我澄清我的意思。

回答

5

雖然轉換器可以很方便,但它們很慢,因爲它們對於每一行數據都被調用一次。這是更快的數據轉換的時間戳被加載到NumPy的整數數組後:

x = np.array([1436472000, 1436472001]) 
x = np.asarray(x, dtype='datetime64[s]') 

產生的NumPy datetime64s數組:

array(['2015-07-09T16:00:00-0400', '2015-07-09T16:00:01-0400'], 
     dtype='datetime64[s]') 

要獲得的Python datetime.datetime的使用tolist()

>>> x.tolist() 
# [datetime.datetime(2015, 7, 9, 20, 0), 
# datetime.datetime(2015, 7, 9, 20, 0, 1)] 

如您所知,matplotlib datenums請計算天數自0001-01-01 00:00:00 UTC,再加上一個。這些不是時間戳(自 Epoch,1970-01-01 00:00:00 UTC開始計秒):

>>> matplotlib.dates.date2num(x.tolist()) 
# array([ 735788.83333333, 735788.83334491]) 
+1

天才!完美地工作,正是我想要的 - 非常感謝你。 – user5036748