使用 python 重新采样 olhc 数据帧时出错

当尝试将 OHLC 数据帧从 1m 重新采样到每小时时,我收到此错误:


数据框


df.info()


#   Column     Dtype         

---  ------     -----         

 0   Date_Time  datetime64[ns]

 1   Open       float64       

 2   High       float64       

 3   Low        float64       

 4   Close      float64


df.tail()


            Date_Time            Open    High    Low     Close

    1692259 2014-12-30 20:51:00  2321.0  1213.0  1223.0  2334.0

    1692260 2014-12-30 20:52:00  2342.0  2322.0  2332.0  2332.0

    1692261 2014-12-30 20:53:00  3421.0  2322.0  2334.0  2123.0

    1692262 2014-12-30 20:54:00  2312.0  2332.0  2324.0  2321.0

    1692263 2014-12-30 20:55:00  2312.0  1212.0  2343.0  2323.0

...

尝试1


df_ohlc = df.resample('60T', on='Date_Time').ohlc()

错误


DataError: No numeric types to aggregate

尝试2


使用 venky__ 推荐另一篇具有类似解决方案的帖子


df_ohlc = df.resample('60T', on='Date_Time').agg({

    'Open':'first',

    'High':'max',

    'Low':'min',

    'Close':'last'

})

包含 NaN,但 df 是干净的。如何避免这种情况?


                       Open    High     Low   Close

Date_Time                                          

2015-12-26 18:00:00     NaN     NaN     NaN     NaN

2015-12-26 19:00:00     NaN     NaN     NaN     NaN

2015-12-26 20:00:00     NaN     NaN     NaN     NaN

2015-12-26 21:00:00     NaN     NaN     NaN     NaN

2015-12-26 22:00:00     NaN     NaN     NaN     NaN


莫回无
浏览 78回答 1
1回答

隔江千里

下一个版本的代码对我有用,由于您提供的行数很少,我只进行了 2 分钟的聚合。我认为不起作用的原因是您的数据采用字符串格式,而不是需要日期时间列采用日期时间格式,其余部分采用浮点数格式,而不是字符串。我在代码中正确地将字符串转换为日期时间。或者不工作的另一个原因是因为你没有这样做df.set_index('Date_Time'),我也在我的代码中这样做了。在线尝试一下!import io, pandas as pd, numpy as npdf = pd.read_csv(io.StringIO("""Date_Time,Open,High,Low,Close2014-12-30 20:51:00,2321.0,1213.0,1223.0,2334.02014-12-30 20:52:00,2342.0,2322.0,2332.0,2332.02014-12-30 20:53:00,3421.0,2322.0,2334.0,2123.02014-12-30 20:54:00,2312.0,2332.0,2324.0,2321.02014-12-30 20:55:00,2312.0,1212.0,2343.0,2323.0"""))df.Date_Time = pd.to_datetime(df.Date_Time)df.set_index('Date_Time')print(df)df = df.resample('2min', on = 'Date_Time').agg({    'Open':'first',    'High':'max',    'Low':'min',    'Close':'last',})print(df)输出是:            Date_Time    Open    High     Low   Close0 2014-12-30 20:51:00  2321.0  1213.0  1223.0  2334.01 2014-12-30 20:52:00  2342.0  2322.0  2332.0  2332.02 2014-12-30 20:53:00  3421.0  2322.0  2334.0  2123.03 2014-12-30 20:54:00  2312.0  2332.0  2324.0  2321.04 2014-12-30 20:55:00  2312.0  1212.0  2343.0  2323.0                       Open    High     Low   CloseDate_Time2014-12-30 20:50:00  2321.0  1213.0  1223.0  2334.02014-12-30 20:52:00  2342.0  2322.0  2332.0  2123.02014-12-30 20:54:00  2312.0  2332.0  2324.0  2323.0
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python