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

回答編集履歴

4

Update

2021/11/07 14:20

投稿

melian
melian

スコア21265

answer CHANGED
@@ -38,27 +38,27 @@
38
38
  以下、かなり冗長ですが書き換えの一例として参考にして下さい(動作保証はありません)。
39
39
  ```python
40
40
  df_list = []
41
- for i in soup_html:
41
+ for s in soup_html:
42
42
  rank_list = []
43
43
  height_list = []
44
44
  weight = []
45
45
  df = pd.DataFrame()
46
46
 
47
- content = i.find_all(class_='Num')
47
+ content = s.find_all(class_='Num')
48
48
  for i in content:
49
49
  rank = i.text
50
50
  rank = rank.replace('\n', '')
51
51
  rank_list.append(rank)
52
52
  df['成績'] = rank_list
53
53
 
54
- content = i.find_all(class_='height')
54
+ content = s.find_all(class_='height')
55
55
  for i in content:
56
56
  height = i.text
57
57
  height = height.replace('\n', '')
58
58
  height_list.append(height)
59
59
  df['身長'] = height_list
60
60
 
61
- content = i.find_all(class_='weight')
61
+ content = s.find_all(class_='weight')
62
62
  for i in content:
63
63
  weight = i.text
64
64
  weight = weight.replace('\n', '')

3

Update

2021/11/07 14:20

投稿

melian
melian

スコア21265

answer CHANGED
@@ -33,22 +33,41 @@
33
33
 
34
34
  **追記**
35
35
 
36
- > 上記のような手法でDFを作成していま
36
+ > 以下が現在コードでどのように変更れば、実現できるのか
37
37
 
38
- 以下の様な流れになるかといま
38
+ 以下なり冗長ですが書き換えの一例して参考にして下さ(動作保証はありせん)
39
39
  ```python
40
40
  df_list = []
41
- for i in soup: # soupを取得(ここが1000個近くある部分)
42
- for i in content: # 成績、身長、体重を取得
41
+ for i in soup_html:
42
+ rank_list = []
43
+ height_list = []
43
- :
44
+ weight = []
45
+ df = pd.DataFrame()
44
46
 
47
+ content = i.find_all(class_='Num')
48
+ for i in content:
49
+ rank = i.text
50
+ rank = rank.replace('\n', '')
45
- df = pd.DataFrame()
51
+ rank_list.append(rank)
46
52
  df['成績'] = rank_list
47
- :
48
53
 
54
+ content = i.find_all(class_='height')
55
+ for i in content:
56
+ height = i.text
57
+ height = height.replace('\n', '')
58
+ height_list.append(height)
59
+ df['身長'] = height_list
60
+
61
+ content = i.find_all(class_='weight')
62
+ for i in content:
63
+ weight = i.text
64
+ weight = weight.replace('\n', '')
65
+ weight_list.append(weight)
66
+ df['体重'] = weight_list
67
+
49
68
  # for i in soup のループが1回完了する毎にリストに追加します
50
- df_list.append(df)
69
+ df_list.append(df.sort_values('成績'))
51
70
 
52
71
  # 全て取得したら縦に連結
53
- df_all = pd.concat(i.sort_values('成績') for i in df_list)
72
+ df_all = pd.concat(df_list)
54
73
  ```

2

Update

2021/11/07 14:15

投稿

melian
melian

スコア21265

answer CHANGED
@@ -29,4 +29,26 @@
29
29
  A 162 46 1 3
30
30
  C 170 60 2 1
31
31
  B 168 58 3 2
32
+ ```
33
+
34
+ **追記**
35
+
36
+ > 上記のような手法でDFを作成しています。
37
+
38
+ 以下の様な流れになるかと思います。
39
+ ```python
40
+ df_list = []
41
+ for i in soup: # soupを取得(ここが1000個近くある部分)
42
+ for i in content: # 成績、身長、体重を取得
43
+ :
44
+
45
+ df = pd.DataFrame()
46
+ df['成績'] = rank_list
47
+ :
48
+
49
+ # for i in soup のループが1回完了する毎にリストに追加します
50
+ df_list.append(df)
51
+
52
+ # 全て取得したら縦に連結
53
+ df_all = pd.concat(i.sort_values('成績') for i in df_list)
32
54
  ```

1

Update

2021/11/06 09:12

投稿

melian
melian

スコア21265

answer CHANGED
@@ -18,10 +18,9 @@
18
18
  '過去成績': [ 3, 2, 1],
19
19
  }, index = ['A', 'B', 'C'])
20
20
 
21
- df3 = pd.concat([df1.sort_values('成績'), df2.sort_values('成績')])
21
+ df3 = pd.concat(i.sort_values('成績') for i in (df1, df2))
22
22
 
23
23
  print(df3)
24
-
25
24
  #
26
25
  身長 体重 成績 過去成績
27
26
  C 150 50 1 1