如何使用datetime ohlcv高效地将数组转换为数据帧,并将列值除以100?

2024-04-25 10:04:15 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我从api获得的json输出


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

我想将这个json/数组转换为时间戳,ohlcv数据具有DateTime索引,ohlc值必须除以100,或者有时除以10000,具体取决于大小

最终输出必须如下所示:

                         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上是可用的,但我想用更少的代码和更快的执行来高效地完成它。 此外,当前数据为5分钟。如果我得到1分钟的数据,我想创建一个函数来对数据进行相应的重采样。
我会尽快用我当前的代码更新这个问题

代码为除以100。我想对4列(o、h、l、c)执行此操作。正在寻找一艘客轮

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

Update::Query这是一种高效的方法吗?
我的当前代码::

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]

Tags: 数据代码divjsondfclosedatadatetime
1条回答
网友
1楼 · 发布于 2024-04-25 10:04:15

如果您想同时运行它,我认为您也可以使用以下方法。这是回答你问题的最佳方式吗

df[['open','high','low','close']] = df[['open','high','low','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

相关问题 更多 >