Как преобразовать число numpy .int64 в объект datetime? - PullRequest
1 голос
/ 05 мая 2020

Я работаю с pandas фреймом данных, в котором есть столбец под названием «отметка времени», который начинается с 0, а затем увеличивается, как если бы это объект datetime. Когда я использую type () для объектов в "отметке времени" серии / столбца Pandas, он говорит, что каждая точка данных - это numpy .int64. Данные представлены с точностью до миллисекунды; например, следующее число в столбце «отметка времени» после 0 - 768 или 768 миллисекунд после полуночи в дату, с которой получены данные. Но вот тут это и надоедает. После 59999 он переходит на 100000, и поскольку это всего лишь 64-битное целое число, я не могу выполнять операции timedelta с этими данными. Как мне добавить новый столбец с этой информацией, но в истинном объекте datetime numpy или, что еще лучше, просто преобразовать все в миллисекунды с полуночи? Например, 1000000 или 10: 00: 000 превратится в 600000.

Чтобы дать контекст, я хочу создать серию фреймов данных, каждый из которых содержит X секунд данных. Так что в идеале я бы просто проанализировал данные по столбцу «timestamp» и вынул строки от t до t плюс (X * 1000) миллисекунд, но я не могу этого сделать в настоящее время, потому что данные не в чистой миллисекундной форме . Вот изображение того, как выглядят данные: данные

Заранее большое спасибо!

1 Ответ

0 голосов
/ 05 мая 2020

В вашем CSV-файле нет дня, в который была взята информация, поэтому вам придется адаптировать код, чтобы « преобразовать все в миллисекунды с полуночи » желаемого дня.

dt = "2020-05-05 00:00:00.000000"

ESH5 Пример CSV-файл

Timestamp, Ticker, Side, Flags, Depth, Level1, ...
[000] 000000000, ESH5, BUY, 0, 10, 2035.00000000 x 7 (6),...
[001] 000000000, ESH5, SELL, 0, 10, 2035.25000000 x 7 (6),...
[002] 000000464, ESH5, BUY, 0, 10, 2035.00000000 x 9 (7),...
[003] 000000468, ESH5, BUY, 0, 10, 2035.00000000 x 9 (7),..
...
...
[287] 235959340, ESH5, BUY, 0, 10, 1996.25000000 x 16 (9),... 
[288] 235959342, ESH5, BUY, 0, 10, 1996.25000000 x 16 (9),...
[289] 235959789, ESH5, SELL, 0, 10, 1996.50000000 x 17 (8),...
[290] 235959884, ESH5, SELL, 0, 10, 1996.50000000 x 17 (8),...
import numpy as np
from datetime import datetime
import pandas as pd

def fix_Timestamp(t):
    t = str("{:09d}".format(t))
    dt = "2020-05-05 {}:{}:{}.{}000".format(t[0:2], t[2:4], t[4:6], t[6:9])
    dt64 = np.datetime64(dt)
    ts = (dt64 - np.datetime64('1970-01-01T00:00:00Z')) / np.timedelta64(1, 's')
    return datetime.utcfromtimestamp(ts)

df = pd.read_csv('data.csv')
print(df)

df['fixedTimestamp'] = df.Timestamp.apply(fix_Timestamp)

print(df['fixedTimestamp'])

Вывод из df['fixedTimestamp']

0     2020-05-05 00:00:00.000
1     2020-05-05 00:00:00.000
2     2020-05-05 00:00:00.464
3     2020-05-05 00:00:00.468
4     2020-05-05 00:00:00.468
                ...
286   2020-05-05 23:59:59.340
287   2020-05-05 23:59:59.340
288   2020-05-05 23:59:59.342
289   2020-05-05 23:59:59.789
290   2020-05-05 23:59:59.884
Name: fixedTimestamp, Length: 291, dtype: datetime64[ns]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...