如何将一个numpy.int64的数字转换为数据时间对象?

问题描述 投票:0回答:1

我正在使用一个pandas数据框架,其中有一列名为 "timestamp "的数据,从0开始,然后增加,好像它是一个日期时间对象。当我对Pandas seriescolumn "timestamp "中的对象使用type()时,它说每个数据点都是一个numpy.int64。数据的粒度是毫秒级的,例如,"timestamp "列中0之后的下一个数字是768,也就是数据来源日期的午夜后768毫秒。但这也是它变得烦人的地方。在59999之后,它就会跳转到100000,由于它只是一个64位的整数,所以我无法对这些数据进行timedelta操作。我如何添加一个新的列,它有这些信息,但是是在一个真正的numpy datetime对象中,或者更好的是,只是把所有的东西都转换为午夜后的毫秒?例如,1000000,或者10:00:000,会变成600000。

为了提供上下文,我想创建一系列的数据帧,每个数据帧包含X秒的数据。因此,理想情况下,我只需要通过 "时间戳 "列来解析数据,并取出从t到t加(X*1000)毫秒的行,但我目前不能这样做,因为数据不是纯毫秒形式的。下面是一张数据的图片。数据

先谢谢你了

python-3.x pandas numpy dataframe finance
1个回答
0
投票

你的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]
© www.soinside.com 2019 - 2024. All rights reserved.