teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

修正

2020/08/11 11:21

投稿

666_paru
666_paru

スコア20

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

説明の修正

2020/08/11 11:21

投稿

666_paru
666_paru

スコア20

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
- pd.merge()第1第2引数入れ替え、howをrightにするも試しましたが、欠損ありのままかデータが空のままでした
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
- toEnd = endDay.strftime(fmt)
30
+ volume open high low close
45
-
46
- params = {
31
+ time
47
- 'from': dateFrom,
48
- "to": toEnd,
49
- "granularity": size,
50
- }
51
-
52
- r = instruments.InstrumentsCandles(instrument=pair, params=params)
32
+ 2020-08-04T00:00:05.000000000Z NaN NaN NaN NaN NaN
53
- api.request(r)
54
-
55
- for raw in r.response['candles']:
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
- df = df.set_index('time')
34
+ 2020-08-04T00:00:15.000000000Z NaN NaN NaN NaN NaN
62
- repair(df,term)
35
+ 2020-08-04T00:00:20.000000000Z NaN NaN NaN NaN NaN
63
-
64
-     # CSVで書き出す処理
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
  よろしくお願いいたします。