为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

莫回无 2023-09-12 17:14:05
当尝试将 OHLC 数据帧从 1m 重新采样到每小时时,我收到此错误:数据框df.info()#   Column     Dtype         ---  ------     -----          0   Date_Time  datetime64[ns] 1   Open       float64        2   High       float64        3   Low        float64        4   Close      float64df.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...尝试1df_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   CloseDate_Time                                          2015-12-26 18:00:00     NaN     NaN     NaN     NaN2015-12-26 19:00:00     NaN     NaN     NaN     NaN2015-12-26 20:00:00     NaN     NaN     NaN     NaN2015-12-26 21:00:00     NaN     NaN     NaN     NaN2015-12-26 22:00:00     NaN     NaN     NaN     NaN
查看完整描述

1 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

下一个版本的代码对我有用,由于您提供的行数很少,我只进行了 2 分钟的聚合。

我认为不起作用的原因是您的数据采用字符串格式,而不是需要日期时间列采用日期时间格式,其余部分采用浮点数格式,而不是字符串。我在代码中正确地将字符串转换为日期时间。

或者不工作的另一个原因是因为你没有这样做df.set_index('Date_Time'),我也在我的代码中这样做了。

在线尝试一下!

import io, pandas as pd, numpy as np


df = pd.read_csv(io.StringIO("""

Date_Time,Open,High,Low,Close

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

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

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

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

2014-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   Close

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

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

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

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

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

                       Open    High     Low   Close

Date_Time

2014-12-30 20:50:00  2321.0  1213.0  1223.0  2334.0

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

2014-12-30 20:54:00  2312.0  2332.0  2324.0  2323.0


查看完整回答
反对 回复 2023-09-12
  • 1 回答
  • 0 关注
  • 71 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信