質問編集履歴

2

修正

2020/08/11 11:21

投稿

666_paru
666_paru

スコア20

test CHANGED
@@ -1 +1 @@
1
- Pandasのdfのマージするとデータが空にってしまう
1
+ Pandasのdfのインデックス用とデータ用をマージするとデータが反映され
test CHANGED
@@ -9,6 +9,8 @@
9
9
 
10
10
 
11
11
  ```python
12
+
13
+ base_df
12
14
 
13
15
  volume open high low close
14
16
 
@@ -56,6 +58,16 @@
56
58
 
57
59
  ```python
58
60
 
61
+
62
+
63
+ new_df = pd.DataFrame(columns=["volume", "open", "high", "low", "close"])
64
+
65
+ new_df['time'] = pd.date_range(start=day, end=day + datetime.timedelta(hours=23, minutes=59, seconds=55), freq="5S").strftime(fmt)
66
+
67
+
68
+
69
+
70
+
59
71
  volume open high low close
60
72
 
61
73
  time
@@ -74,4 +86,16 @@
74
86
 
75
87
 
76
88
 
89
+ 以下のコードを試しましたがうまくいかなかったです
90
+
91
+ ```python
92
+
93
+ df_merge = pd.merge(base_df, new_df, on='time', how='right')
94
+
95
+ df_merge = new_df.join(base_df, how='outer')
96
+
97
+ ```
98
+
99
+
100
+
77
- よろしくお願いいたします。
101
+ お分かりの方、よろしくお願いいたします。

1

説明の修正

2020/08/11 11:21

投稿

666_paru
666_paru

スコア20

test CHANGED
File without changes
test CHANGED
@@ -52,116 +52,26 @@
52
52
 
53
53
 
54
54
 
55
-
56
-
57
-
58
-
59
- 以下のコードで、マージ部分がうまくできず、要素が空のままになってしまいます。
60
-
61
- pd.merge()の第1第2引数入れ替え、howをrightにするも試しましたが、欠損ありのままかデータが空のままでした。
55
+ 時間のインデックスがそろっているnew_dfを作成しこちら対応する時間のカラムに上書きを考えましたが、どうしたらよいでしょうか?
62
-
63
-
64
-
65
- ・データ取得部分
66
56
 
67
57
  ```python
68
58
 
69
- for term in pd.bdate_range(start=start, end=end):
59
+ volume open high low close
70
60
 
71
- data = []
61
+ time
72
62
 
63
+ 2020-08-04T00:00:05.000000000Z NaN NaN NaN NaN NaN
73
64
 
65
+ 2020-08-04T00:00:10.000000000Z NaN NaN NaN NaN NaN
74
66
 
75
- for i in range(4):
67
+ 2020-08-04T00:00:15.000000000Z NaN NaN NaN NaN NaN
76
68
 
77
- # 1回5000件までなので、6時間毎に取得し1日分を纏める
69
+ 2020-08-04T00:00:20.000000000Z NaN NaN NaN NaN NaN
78
70
 
79
- startDay = term + datetime.timedelta(hours=i * 6)
80
-
81
- dateFrom = startDay.strftime(fmt)
82
-
83
-
84
-
85
- endDay = term + datetime.timedelta(hours=(i + 1) * 6)
71
+ 2020-08-04T00:00:25.000000000Z NaN NaN NaN NaN NaN
86
-
87
- toEnd = endDay.strftime(fmt)
88
-
89
-
90
-
91
- params = {
92
-
93
- 'from': dateFrom,
94
-
95
- "to": toEnd,
96
-
97
- "granularity": size,
98
-
99
- }
100
-
101
-
102
-
103
- r = instruments.InstrumentsCandles(instrument=pair, params=params)
104
-
105
- api.request(r)
106
-
107
-
108
-
109
- for raw in r.response['candles']:
110
-
111
- data.append(
112
-
113
- [raw['time'], raw['volume'], raw['mid']['o'], raw['mid']['h'], raw['mid']['l'], raw['mid']['c']])
114
-
115
-
116
-
117
- df = pd.DataFrame(data)
118
-
119
- df.columns = ['time', 'volume', 'open', 'high', 'low', 'close']
120
-
121
- df = df.set_index('time')
122
-
123
- repair(df,term)
124
-
125
-
126
-
127
-     # CSVで書き出す処理
128
72
 
129
73
  ```
130
74
 
131
75
 
132
76
 
133
- ・欠損処理
134
-
135
- ```python
136
-
137
- def repair(base_df, day):
138
-
139
- fmt = '%Y-%m-%dT%H:%M:%S.00000000Z'
140
-
141
- day = '8/1/2020'
142
-
143
-
144
-
145
- new_df = pd.DataFrame(columns=["volume", "open", "high", "low", "close"])
146
-
147
- new_df['time'] = pd.date_range(start=day, end=day + datetime.timedelta(hours=23, minutes=59, seconds=55),freq="5S").strftime(fmt)
148
-
149
-
150
-
151
- df_merge = pd.merge(new_df, base_df, on='time', how='left')
152
-
153
- df_merge.index = df_merge['time']
154
-
155
- del df_merge['time']
156
-
157
-
158
-
159
- return df_merge
160
-
161
- ```
162
-
163
-
164
-
165
- どのように修正したら良いか教えて頂きたいです。
166
-
167
77
  よろしくお願いいたします。