我有一个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'的实例”
编辑:好的,显然,我只需要将时间戳设置为数据帧的索引,然后重新采样就可以了。
答案 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)
好吧,显然,我只需要将时间戳设置为数据帧的索引,然后重新采样就可以了。无论如何,都不必担心时间戳转换或其他任何麻烦。