微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何有效地将数组转换为日期时间为ohlcv的pandas数据帧,并且还要将列值除以100?

如何解决如何有效地将数组转换为日期时间为ohlcv的pandas数据帧,并且还要将列值除以100?

以下是我从api获取的json输出


{
    "data": [
        [
            1594373520,43625,43640,43565,43600,59561
        ],[
            1594373820,43650,43505,127844
        ],[
            1594374120,43560,43680,43515,43660,74131
        ]
    ],"message": "","status": "success"
}

我想将此json / array转换为时间戳,具有dateTime索引的ohlcv数据,并且ohlc值必须除以100或有时除以10000,具体取决于ticksize。

最终输出必须类似于以下内容

                         date   open    high    low     close   volume
0   2018-04-12 09:15:00+05:30   295.00  295.75  293.25  293.80  55378
1   2018-04-12 09:20:00+05:30   293.75  293.75  292.55  292.95  32219
2   2018-04-12 09:25:00+05:30   292.95  293.40  292.65  292.80  23643
3   2018-04-12 09:30:00+05:30   292.80  293.00  292.75  292.80  12313
4   2018-04-12 09:35:00+05:30   292.75  292.85  291.50  291.55  32198

我知道答案可以在SO上找到,但我想用更少的代码和更快的执行效率来做到这一点。 而且,如果我得到1分钟的数据,当前数据是5分钟,我想创建一个函数来相应地对数据进行重新采样。
我将尝试尽快用当前代码更新问题。

除以100的代码。我想对4列(o,h,l,c)执行此操作。寻找一个班轮。

df['A'] = df['A'].div(100).round(2)

更新::是否可以高效地进行查询
我当前的代码::

import pandas as pd

records = data['data']
df = pd.DataFrame(records,columns=['datetime','open','high','low','close','volume'])
df['datetime'] = df['datetime'].apply(pd.Timestamp,unit='s',tzinfo=pytz.timezone("Asia/Kolkata"))
df['open'] = df['open'].astype(float).div(100)
df['high'] = df['high'].astype(float).div(100)
df['low'] = df['low'].astype(float).div(100)
df['close'] = df['close'].astype(float).div(100)
df.set_index('datetime',inplace=True)
print(df)

输出::

                             open    high     low   close  volume
datetime
2020-08-12 09:00:00+05:30  3124.0  3124.0  3120.0  3121.0     168
2020-08-12 09:05:00+05:30  3121.0  3124.0  3121.0  3123.0     163
2020-08-12 09:10:00+05:30  3123.0  3124.0  3122.0  3123.0     133
2020-08-12 09:15:00+05:30  3123.0  3125.0  3122.0  3122.0     154
2020-08-12 09:20:00+05:30  3122.0  3125.0  3122.0  3125.0     131
...                           ...     ...     ...     ...     ...
2020-08-13 23:05:00+05:30  3159.0  3162.0  3157.0  3159.0     432
2020-08-13 23:10:00+05:30  3159.0  3161.0  3155.0  3156.0     483
2020-08-13 23:15:00+05:30  3156.0  3160.0  3154.0  3159.0    1344
2020-08-13 23:20:00+05:30  3159.0  3167.0  3156.0  3165.0     284
2020-08-13 23:25:00+05:30  3165.0  3167.0  3162.0  3164.0     166

[348 rows x 5 columns]

解决方法

如果您想一起运行它们,我想您也可以使用以下方法。这是回答您问题的最好方法吗?

df[['open','high','low','close']] = df[['open','close']].astype(float).div(100)

    datetime    open    high    low close   volume
0   2020-07-10 15:02:00+05:30   436.25  436.4   435.65  436.00  59561
1   2020-07-10 15:07:00+05:30   436.00  436.5   435.05  435.65  127844
2   2020-07-10 15:12:00+05:30   435.60  436.8   435.15  436.60  74131

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。