Come ottengo l'ora UNIX da numpy.datetime64 o numpy.datetime_?Come ottenere un timestamp unix da numpy.datetime64
quanto a per esempio:
np.datetime_('2012-08-08 13:37:00')
Come ottengo l'ora UNIX da numpy.datetime64 o numpy.datetime_?Come ottenere un timestamp unix da numpy.datetime64
quanto a per esempio:
np.datetime_('2012-08-08 13:37:00')
Ottengo risultati incoerenti per il valore di np.datetime64('now')
su numpy 1.6.1 contro 1.7.
Questo funziona su entrambi:
>>> import datetime
>>> import numpy as np
>>> now = np.datetime64(datetime.datetime.now())
>>> (now.astype('uint64')/1e6).astype('uint32')
1344447810
def get_unixtime(time):
return (time.astype(np.int64)/1e6).astype(np.int64)
get_unixtime(np.datetime64('now'))
sembra restituire il timestamp UNIX, ho controllato solo con alcune date.
NumPy datetime64 ha unità variabili:
estratti da official doc:
L'unità di memorizzazione interna viene automaticamente selezionato dalla forma della stringa e può essere un'unità di data o un'unità di tempo. Le unità di data sono anni ('Y'), mesi ('M'), settimane ('W') e giorni ('D'), mentre le unità di tempo sono ore ('h'), minuti ('m'), secondi ('s'), millisecondi ('ms') e alcune unità aggiuntive basate sui prefissi SI-prefisso.
Quindi, in primo luogo abbiamo bisogno di controllare l'unità di corrente utilizzando DTYPE, ad esempio:
>>> now = np.datetime64(datetime.datetime.now())
>>> now.dtype
# for ns unit, use:
dtype('<M8[ns]')
now.astype('int64')/1e9, dtype='int32'
# for us unit, use:
dtype('<M8[us]')
now.astype('int64')/1e6, dtype='int32'
# for ms unit, use:
dtype('<M8[ms]')
now.astype('int64')/1e3, dtype='int32'
e così via ....
Al fine di tener conto delle unità, credo è necessario fare qualcosa di simile:
def get_unixtime(dt64):
return dt64.astype('datetime64[s]').astype('int')
si noti che questo si trasforma in 'secondi' (il [s]
) prima della conversione a intero S. Funziona su NumPy 1.12.1.
secondo i documenti datetime64 non è realmente affidabile in [numpy 1.6] (http://docs.scipy.org/doc/numpy/reference/arrays.datetime.html#differences-between-1-6-and- 1-7-dateTimes). Anche per 1.7 l'api è sperimentale. Quindi non sono sicuro, se otterrete risultati coerenti su diverse piattaforme e architetture (64 bit?). Ulteriori informazioni sono fornite nelle [note di rilascio di pandas 0.8] (http://pandas.pydata.org/pandas-docs/dev/whatsnew.html#potential-porting-issues-for-pandas-0-7-3- utenti). Quindi non sono sicuro, se è una buona scelta usare datetime64 su numpy 1.6. – bmu
Sì okey, dal momento che il codice sarà sperimentale di per sé e risiederà in una sola macchina può essere considerato funzionante se funziona una volta nel modo giusto? – SlimJim
ok, ma allora dovresti specificare la versione numpy, la piattaforma e l'architettura (magari la versione python, gli stessi risultati su 2 e 3?) Nella tua domanda. altrimenti potrebbe essere fuorviante per qualcuno che lo legge. – bmu