DataFrame不允许时间戳转换进行重新采样

时间:2018-12-19 17:49:33

标签: python pandas datetime dataframe timestamp

我有一个1200万个csv条目,我将它作为数据框导入了带有如下所示的大熊猫。

pair    time    open    close
0   AUD/JPY 20170102 00:00:08.238   83.774002   84.626999
1   AUD/JPY 20170102 00:00:08.352   83.774002   84.626999
2   AUD/JPY 20170102 00:00:13.662   84.184998   84.324997
3   AUD/JPY 20170102 00:00:13.783   84.184998   84.324997

时间列是一个字符串,但是我需要一个datetime对象以便对数据帧进行降采样并获取OHLC值。 df.resample函数需要类似日期时间的索引(DatetimeIndex,PeriodIndex或TimedeltaIndex)。我尝试过

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

但是会创建时间戳,由于某种原因,我无法将时间戳转换为日期时间对象。

time = df['time'].dt.to_pydatetime()
df['time'] = time

这可以创建一个单独的数组并分配结果列表,但是一旦将其合并到数据框中,它就会自动转换回时间戳。即使使用dtype ='object'创建一个新的数据框,然后像以前一样添加日期时间列表,它也不起作用。

一种解决方法是单独转换每一行,但是给定数据框的大小将需要一定的时间。有什么建议吗?

编辑:

time = pd.DataFrame(dtype = 'datetime64')
time = pd.to_datetime(df['time'])
time = time.dt.to_pydatetime()
new = pd.DataFrame({'pair': df['pair'],'time': pd.Series(time, dtype='object'), 'open': df['open'], 'close': df['close']}, dtype ='object')

现在我可以在调用new ['time'] [0]时接收日期时间对象

new['time'].resample('5T')

仍然引发错误:“仅对DatetimeIndex,TimedeltaIndex或PeriodIndex有效,但是得到了'RangeIndex'的实例”

编辑:好的,显然,我只需要将时间戳设置为数据帧的索引,然后重新采样就可以了。

2 个答案:

答案 0 :(得分:0)

您可以尝试:

import datetime as dt
df['time']=pd.to_datetime(df['time'], format="%y/%m/%d")
df['timeconvert'] = df['time'].dt.date

答案 1 :(得分:0)

好吧,显然,我只需要将时间戳设置为数据帧的索引,然后重新采样就可以了。无论如何,都不必担心时间戳转换或其他任何麻烦。