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

質問編集履歴

3

望みの文を追加しました。

2020/11/14 06:41

投稿

zero_zero
zero_zero

スコア10

title CHANGED
File without changes
body CHANGED
@@ -1,11 +1,7 @@
1
1
  表記の件でマージする方法を教えてください。
2
2
 
3
- なかなかデバックのコツという書籍が探し出せず質問させていただきました。)
3
+ (デバックのコツという書籍が余りないようで、ここで質問させていただきました。)
4
4
 
5
- (テーブルの中身の存在はprint文で確認ずみです。)
6
-
7
- (やりたいことはコメント文を記載しました。行数が一致していないというあたりはあれど、どう進めていいかと。)
8
-
9
5
  ---------
10
6
  コードは以下の通りです。
11
7
  ```
@@ -62,7 +58,7 @@
62
58
  except:
63
59
  continue
64
60
 
65
- # やりたいとはこ ↓ コメントアウトするとtqdm走り出し
61
+ # ここの表結合くいかない
66
62
  race_results[race_id] = pd.concat([race_results[race_id], horse_results_sub])
67
63
 
68
64
 
@@ -96,4 +92,14 @@
96
92
  results = pd.concat([results[key] for key in results], sort=False)
97
93
  results.to_pickle('../all_results.pkl')
98
94
 
99
- ```
95
+ ```
96
+
97
+
98
+ 望んでいるデータは「https://db.netkeiba.com/race/201901010101」の表(競馬のレース結果の表)に同ホームーページでスクレイピングした「["race_id","horse_id","jocky_id","trainer_id"]」のデータ表を横に追加した表を作りたい。
99
+
100
+ 上記のコードでは、
101
+ race_results[race_id]のデータフレームにhorse_results_sub]のデータフレームをマージさせたいのですが、
102
+ race_results[race_id]のデータフレームが出力されてしまいます。
103
+
104
+ 望んでいる出力結果の例
105
+ ![![イメージ説明](28eed4cffa254a190400c89b72951333.jpeg)](e1524d27680522001f27ceac1c28eb86.jpeg)

2

コードを見やすくしました。

2020/11/14 06:40

投稿

zero_zero
zero_zero

スコア10

title CHANGED
File without changes
body CHANGED
@@ -8,6 +8,7 @@
8
8
 
9
9
  ---------
10
10
  コードは以下の通りです。
11
+ ```
11
12
 
12
13
  import pandas as pd
13
14
  import requests
@@ -93,4 +94,6 @@
93
94
  for key in results:
94
95
  results[key].index = [key] * len(results[key])
95
96
  results = pd.concat([results[key] for key in results], sort=False)
96
- results.to_pickle('../all_results.pkl')
97
+ results.to_pickle('../all_results.pkl')
98
+
99
+ ```

1

コードの詳細を記載しました。エラーコードは出力されなかったです。

2020/11/14 05:54

投稿

zero_zero
zero_zero

スコア10

title CHANGED
File without changes
body CHANGED
@@ -1,5 +1,96 @@
1
- pandas便利で使っています。
2
- 関数の外なら2次元同士のテーブルをマージすることはできるのですが、関数の中でデータフレームをマージすることができません。
3
- (テーブル中身はprint文確認ずみ)
1
+ 表記マージする方法を教えてください。
4
2
 
3
+ (なかなかデバックのコツという書籍が探し出せず質問させていただきました。)
4
+
5
+ (テーブルの中身の存在はprint文で確認ずみです。)
6
+
7
+ (やりたいことはコメント文を記載しました。行数が一致していないというあたりはあれど、どう進めていいかと。)
8
+
9
+ ---------
10
+ コードは以下の通りです。
11
+
12
+ import pandas as pd
13
+ import requests
14
+ from bs4 import BeautifulSoup
15
+ import openpyxl
16
+ import xlwt
17
+ import datetime
18
+ import time
19
+ import os
20
+ import pprint
21
+ from tqdm.notebook import tqdm as tqdm
22
+
23
+ df_horse_results_sub = pd.DataFrame(index=[], columns=[])
24
+ horse_results_sub =[[],[],[]]
25
+ race_results_ids = []
26
+ horse_results_ids = []
27
+ jocky_results_ids = []
28
+ trainer_results_ids = []
29
+
30
+ def scrape_race_results(race_id_list, pre_race_results={}):
31
+ global horse_results_sub
32
+ global df_horse_results_sub
33
+ race_results = pre_race_results
34
+ for race_id in tqdm(race_id_list):
35
+ if race_id in race_results.keys():
36
+ continue
37
+
38
+ try:
39
+ url = "https://db.netkeiba.com/race/" + race_id
40
+ race_results[race_id] = pd.read_html(url)[0]
41
+ #print(url)
42
+ response_sub = requests.get(url)
43
+ response_sub.encoding = response_sub.apparent_encoding
44
+ soup_sub = BeautifulSoup(response_sub.text, 'html.parser')
45
+ trs3 = soup_sub.find_all(class_="txt_l")
46
+ for each in trs3:
47
+ try:
48
+ Horse_results_link = each.find('a')['href']
49
+ if Horse_results_link[1:6] == "horse":
50
+ race_results_ids.append(race_id)
51
+ horse_results_ids.append(Horse_results_link[-11:-1])
52
+ if Horse_results_link[1:7] == "jockey":
53
+ jocky_results_ids.append(Horse_results_link[-6:-1])
54
+ if Horse_results_link[1:8] == "trainer":
55
+ trainer_results_ids.append(Horse_results_link[-6:-1])
56
+ horse_results_sub = [race_results_ids,horse_results_ids,jocky_results_ids,trainer_results_ids]
57
+ horse_results_col = ["race_id","horse_id","jocky_id","trainer_id"]
58
+
59
+ df_horse_results_sub = pd.DataFrame(horse_results_sub).T
60
+ df_horse_results_sub.columns = horse_results_col
61
+ except:
62
+ continue
63
+
5
- 確認するポイントなどドバイスあたらお願いします。
64
+ # やりたいことはここ ↓ コメントアウトするとtqdmが走します。
65
+ race_results[race_id] = pd.concat([race_results[race_id], horse_results_sub])
66
+
67
+
68
+ time.sleep(1)
69
+
70
+ except IndexError:
71
+ continue
72
+ except:
73
+ break
74
+
75
+ return race_results
76
+
77
+ race_id_list = []
78
+ for place in range(1, 11, 1):
79
+ for kai in range(1, 6, 1):
80
+ for day in range(1, 9, 1):
81
+ for r in range(1, 13, 1):
82
+ for nen in range(2019, 2020 ,1):
83
+ race_id = (
84
+ str(nen).zfill(4)
85
+ + str(place).zfill(2)
86
+ + str(kai).zfill(2)
87
+ + str(day).zfill(2)
88
+ + str(r).zfill(2)
89
+ )
90
+ race_id_list.append(race_id)
91
+
92
+ results = scrape_race_results(race_id_list)
93
+ for key in results:
94
+ results[key].index = [key] * len(results[key])
95
+ results = pd.concat([results[key] for key in results], sort=False)
96
+ results.to_pickle('../all_results.pkl')