質問編集履歴
2
修正
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
Pandasのdfのマージ
|
1
|
+
Pandasのdfのインデックス用とデータ用をマージするとデータが反映されない
|
body
CHANGED
@@ -4,6 +4,7 @@
|
|
4
4
|
(欠損がないので、に8/4の0時20秒のデータを削除しています。)
|
5
5
|
|
6
6
|
```python
|
7
|
+
base_df
|
7
8
|
volume open high low close
|
8
9
|
time
|
9
10
|
2020-08-04T00:00:05.000000000Z 3 106.034 106.034 106.031 106.031
|
@@ -27,6 +28,11 @@
|
|
27
28
|
|
28
29
|
時間のインデックスがそろっているnew_dfを作成し、こちらの対応する時間のカラムに上書きを考えましたが、どうしたらよいでしょうか?
|
29
30
|
```python
|
31
|
+
|
32
|
+
new_df = pd.DataFrame(columns=["volume", "open", "high", "low", "close"])
|
33
|
+
new_df['time'] = pd.date_range(start=day, end=day + datetime.timedelta(hours=23, minutes=59, seconds=55), freq="5S").strftime(fmt)
|
34
|
+
|
35
|
+
|
30
36
|
volume open high low close
|
31
37
|
time
|
32
38
|
2020-08-04T00:00:05.000000000Z NaN NaN NaN NaN NaN
|
@@ -36,4 +42,10 @@
|
|
36
42
|
2020-08-04T00:00:25.000000000Z NaN NaN NaN NaN NaN
|
37
43
|
```
|
38
44
|
|
45
|
+
以下のコードを試しましたがうまくいかなかったです
|
46
|
+
```python
|
47
|
+
df_merge = pd.merge(base_df, new_df, on='time', how='right')
|
48
|
+
df_merge = new_df.join(base_df, how='outer')
|
49
|
+
```
|
50
|
+
|
39
|
-
よろしくお願いいたします。
|
51
|
+
お分かりの方、よろしくお願いいたします。
|
1
説明の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -25,60 +25,15 @@
|
|
25
25
|
2020-08-04T00:00:30.000000000Z 4 106.024 106.027 106.024 106.026
|
26
26
|
```
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
以下のコードで、マージ部分がうまくできず、要素が空のままになってしまいます。
|
31
|
-
|
28
|
+
時間のインデックスがそろっているnew_dfを作成し、こちらの対応する時間のカラムに上書きを考えましたが、どうしたらよいでしょうか?
|
32
|
-
|
33
|
-
・データ取得部分
|
34
29
|
```python
|
35
|
-
for term in pd.bdate_range(start=start, end=end):
|
36
|
-
data = []
|
37
|
-
|
38
|
-
for i in range(4):
|
39
|
-
# 1回5000件までなので、6時間毎に取得し1日分を纏める
|
40
|
-
startDay = term + datetime.timedelta(hours=i * 6)
|
41
|
-
dateFrom = startDay.strftime(fmt)
|
42
|
-
|
43
|
-
endDay = term + datetime.timedelta(hours=(i + 1) * 6)
|
44
|
-
|
30
|
+
volume open high low close
|
45
|
-
|
46
|
-
|
31
|
+
time
|
47
|
-
'from': dateFrom,
|
48
|
-
"to": toEnd,
|
49
|
-
"granularity": size,
|
50
|
-
}
|
51
|
-
|
52
|
-
|
32
|
+
2020-08-04T00:00:05.000000000Z NaN NaN NaN NaN NaN
|
53
|
-
api.request(r)
|
54
|
-
|
55
|
-
|
33
|
+
2020-08-04T00:00:10.000000000Z NaN NaN NaN NaN NaN
|
56
|
-
data.append(
|
57
|
-
[raw['time'], raw['volume'], raw['mid']['o'], raw['mid']['h'], raw['mid']['l'], raw['mid']['c']])
|
58
|
-
|
59
|
-
df = pd.DataFrame(data)
|
60
|
-
df.columns = ['time', 'volume', 'open', 'high', 'low', 'close']
|
61
|
-
|
34
|
+
2020-08-04T00:00:15.000000000Z NaN NaN NaN NaN NaN
|
62
|
-
|
35
|
+
2020-08-04T00:00:20.000000000Z NaN NaN NaN NaN NaN
|
63
|
-
|
64
|
-
|
36
|
+
2020-08-04T00:00:25.000000000Z NaN NaN NaN NaN NaN
|
65
37
|
```
|
66
38
|
|
67
|
-
・欠損処理
|
68
|
-
```python
|
69
|
-
def repair(base_df, day):
|
70
|
-
fmt = '%Y-%m-%dT%H:%M:%S.00000000Z'
|
71
|
-
day = '8/1/2020'
|
72
|
-
|
73
|
-
new_df = pd.DataFrame(columns=["volume", "open", "high", "low", "close"])
|
74
|
-
new_df['time'] = pd.date_range(start=day, end=day + datetime.timedelta(hours=23, minutes=59, seconds=55),freq="5S").strftime(fmt)
|
75
|
-
|
76
|
-
df_merge = pd.merge(new_df, base_df, on='time', how='left')
|
77
|
-
df_merge.index = df_merge['time']
|
78
|
-
del df_merge['time']
|
79
|
-
|
80
|
-
return df_merge
|
81
|
-
```
|
82
|
-
|
83
|
-
どのように修正したら良いか教えて頂きたいです。
|
84
39
|
よろしくお願いいたします。
|