【问题标题】:DataFrame does not allow Timestamps conversion for resamplingDataFrame 不允许用于重采样的时间戳转换
【发布时间】: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


    【解决方案1】:

    你可以试试吗:

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

    【讨论】:

      【解决方案2】:

      好的,显然我只需将时间戳设置为数据帧的索引,然后重新采样就可以毫无问题地应用。无需为时间戳转换或其他任何事情而烦恼,无论如何感谢您的回复。

      【讨论】:

        猜你喜欢
        • 2021-04-15
        • 2015-04-10
        • 1970-01-01
        • 2022-11-13
        • 2022-01-22
        • 2018-10-09
        • 2018-01-20
        • 2017-11-27
        • 1970-01-01
        相关资源
        最近更新 更多