2015-11-02 2 views
4

Я разборе значений даты и времени следующим образом:Как преобразовать объект DATETIME в миллисекундах

df['actualDateTime'] = pd.to_datetime(df['actualDateTime']) 

Как я могу преобразовать эти объекты даты-времени в миллисекундах?

Я читал doc of to_datetime, однако ссылки на миллисекунды отсутствуют.

Обновление (Основано на обратной связи): Это текущая версия кода, который дает ошибку TypeError: Cannot convert input to Timestamp. Столбец Date3 должен содержать миллисекунды (в виде числового эквивалента объекта datetime).

import pandas as pd 
import time 

s1 = {'Date' : ['2015-10-20T07:21:00.000','2015-10-19T07:18:00.000','2015-10-19T07:15:00.000']} 

df = pd.DataFrame(s1) 

df['Date2'] = pd.to_datetime(df['Date']) 

t = pd.Timestamp(df['Date2']) 

df['Date3'] = time.mktime(t.timetuple()) 

print df 
+0

Paste некоторые данные 'ФР [ 'actualDateTime']' – WoodChopper

+0

@WoodChopper: Done. –

+0

Принять ответ rai, если он удовлетворительный! – WoodChopper

ответ

7

Вы можете попробовать pd.to_datetime (ДФ [ 'actualDateTime'], единица = 'мс')

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.to_datetime.html

говорит, что это будет означать в эпоху , с изменениями 's', 'ms', 'ns' ...

Update

Если вы хотите, в эпоху временной метки формы 14567899 ..

import pandas as pd 
import time 
t = pd.Timestamp('2015-10-19 07:22:00') 
time.mktime(t.timetuple()) 

1445219520.0

Latest update: please try this

df=pd.DataFrame(s1) 
df1=pd.to_datetime(df['Date']) 
pd.DatetimeIndex(df1) 
>>>DatetimeIndex(['2015-10-20 07:21:00', '2015-10-19 07:18:00', 
      '2015-10-19 07:15:00'], 
      dtype='datetime64[ns]', freq=None) 
df1.astype(np.int64) 
>>>0 1445325660000000000 
1 1445239080000000000 
2 1445238900000000000 
df1.astype(np.int64) // 10**9 
>>>0 1445325660 
1 1445239080 
2 1445238900 
Name: Date, dtype: int64 

Надежда это помогает!

+0

Если я это сделаю, я не вижу никакого эффекта. Результат по-прежнему 2015-10-19 10:39:00 –

+0

- это желаемая о/п миллисекунды с эпохи, что-то вроде 146887891? – rai

+0

Да. Но если я повторяю ваш код следующим образом: df ['actualDateTime'] = pd.to_datetime (df ['actualDateTime']) t = pd.Timestamp (df ['actualDateTime']) df ['actualDateTime'] = время. mktime (t.timetuple()) Он говорит: TypeError: Невозможно преобразовать ввод в Timestamp –

0
from datetime import datetime 

print datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3] 

>>>> OUTPUT >>>> 
2015-11-02 18:04:32.926 
+0

В нем говорится: strftime() аргумент 1 должен быть строковым или только для чтения буфером, а не –

+0

Можете ли вы отправить полный текст код. –

+0

Я разместил образцы данных. –

1

pandas.to_datetime для преобразования строки или несколько других типа данных для панды datetime[ns]

В вашем случае первоначального 'actualDateTime' не имея milliseconds .so, если вы разбор столбца, который имеет миллисекунды вы получите данные.

, например,

df 
Out[60]: 
         a b 
0 2015-11-02 18:04:32.926 0 
1 2015-11-02 18:04:32.928 1 
2 2015-11-02 18:04:32.927 2 

df.a 
Out[61]: 
0 2015-11-02 18:04:32.926 
1 2015-11-02 18:04:32.928 
2 2015-11-02 18:04:32.927 
Name: a, dtype: object 

df.a = pd.to_datetime(df.a) 

df.a 
Out[63]: 
0 2015-11-02 18:04:32.926 
1 2015-11-02 18:04:32.928 
2 2015-11-02 18:04:32.927 
Name: a, dtype: datetime64[ns] 

df.a.dt.nanosecond 
Out[64]: 
0 0 
1 0 
2 0 
dtype: int64 

df.a.dt.microsecond 
Out[65]: 
0 926000 
1 928000 
2 927000 
dtype: int64 
+0

Да, у меня нет миллисекунд. Однако я подумал, что можно сделать такое преобразование.Ну, чтобы получить секунды, следует ли использовать df.a.dt.second? Я пробовал, но, похоже, он не работает. –

+0

Вы хотите сказать, что 'миллисекунды' не' микросекунды'? – WoodChopper

+0

Правильно, мне нужны миллисекунды. Кроме того, у меня есть 2015-11-02 18:04, а не 015-11-02 18: 04: 32.926 –

1

Временные метки в пандах: always in nanoseconds.

Это дает миллисекунды с начала эпохи (1970-01-01):

df['actualDateTime'] = df['actualDateTime'].astype(np.int64)/int(1e6) 
+0

TypeError: не может астеризировать datetimelike от [datetime64 [ns]] до [int32] –

+0

@KlausosKlausos Это проблема с Windows (или 32-разрядной ОС). Обновлено до 'int64'. –

Смежные вопросы