![](/img/trans.png)
[英]How to convert a Unix Timestamp of a Pandas DataFrame Column with NaN Values to a Datetime
[英]How to convert Array to pandas dataframe with datetime ohlcv efficiently, also divide column values by 100?
以下是 json output 我來自 api
{
"data": [
[
1594373520,
43625,
43640,
43565,
43600,
59561
],
[
1594373820,
43600,
43650,
43505,
43565,
127844
],
[
1594374120,
43560,
43680,
43515,
43660,
74131
]
],
"message": "",
"status": "success"
}
我想將此 json/array 轉換為時間戳,具有 DateTime 索引的 ohlcv 數據,並且 ohlc 值必須除以 100 或有時除以 10000,具體取決於刻度大小。
最終的 output 必須如下所示:
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 分鍾,我想創建一個 function 以相應地重新采樣數據。
我會盡快用我當前的代碼更新這個問題。
除以 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)
Output::
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','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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.