【发布时间】:2018-12-19 17:49:32
【问题描述】:
我有一个包含 1200 万个条目的 csv 文件,我将它作为带有 pandas 的数据框导入,看起来像这样。
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
时间列是一个字符串,但我需要一个日期时间对象来对数据帧进行下采样并获取 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' 的实例”
编辑:好的,显然我只需将时间戳设置为数据帧的索引,然后重新采样就可以毫无问题地应用。
【问题讨论】:
标签: python pandas datetime dataframe timestamp