回答編集履歴

3

文法の修正

2020/10/10 02:14

投稿

toast-uz
toast-uz

スコア3266

test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
 
13
- もしかしたら、DataFrameの作り方に問題があって、数値の中に文字列が含まれているのかもしれません。上記のコードでできる最初のDataFrameを、質問者様のDataFrameと比較確認してください。その際も、文字列数値にまつわるエラーが無くなった際に、このエラーが出てくると思います。
13
+ もしかしたら、DataFrameの作り方に問題があって、数値の中に文字列が含まれているのかもしれません。末尾に例示したコードでできる最初のDataFrameを、質問者様のDataFrameと比較確認してください。文字列数値にまつわるエラーが無くなった際に、この新しいエラーが出てくると思います。
14
14
 
15
15
 
16
16
 

2

文法の修正

2020/10/10 02:14

投稿

toast-uz
toast-uz

スコア3266

test CHANGED
@@ -1,3 +1,23 @@
1
+ まず、質問者様のコードを実際に動かすと
2
+
3
+ SettingWithCopyWarning:
4
+
5
+ A value is trying to be set on a copy of a slice from a DataFrame.
6
+
7
+ Try using .loc[row_indexer,col_indexer] = value instead
8
+
9
+ というエラーが出て、報告されているエラーと違います。
10
+
11
+
12
+
13
+ もしかしたら、DataFrameの作り方に問題があって、数値の中に文字列が含まれているのかもしれません。上記のコードでできる最初のDataFrameを、質問者様のDataFrameと比較確認してください。その際も、文字列数値にまつわるエラーが無くなった際に、このエラーが出てくると思います。
14
+
15
+
16
+
17
+ 以降は、この新しいエラーに基づいた回答をしています。
18
+
19
+
20
+
1
21
  今回のエラーは、スカラー値をDataFrameやSeriesに代入しようとすると発生します。+=も代入の一種です。本来はloc等で、元のDataFrame(今回の場合はdf_ja_result)のどこの場所かを明確に示すことが必要です。
2
22
 
3
23
 
@@ -73,19 +93,3 @@
73
93
  print(df_ja_result)
74
94
 
75
95
  ```
76
-
77
-
78
-
79
- なお、質問者様のコードを実際に動かすと
80
-
81
- SettingWithCopyWarning:
82
-
83
- A value is trying to be set on a copy of a slice from a DataFrame.
84
-
85
- Try using .loc[row_indexer,col_indexer] = value instead
86
-
87
- というエラーが出て、報告されているエラーと違います。このエラーに基づいた回答をしています。
88
-
89
-
90
-
91
- もしかしたら、DataFrameの作り方に問題があって、数値の中に文字列が含まれているのかもしれません。上記のコードでできる最初のDataFrameを、質問者様のDataFrameと比較確認してください。その際も、文字列数値にまつわるエラーが無くなった際に、このエラーが出てくると思います。

1

補足追記

2020/10/10 02:13

投稿

toast-uz
toast-uz

スコア3266

test CHANGED
@@ -10,12 +10,82 @@
10
10
 
11
11
 
12
12
 
13
+ なお、質問文に記載されていないループ部分にまつわるコードは省きました。
14
+
13
15
 
14
16
 
15
17
  ```Python
18
+
19
+ import pandas as pd
20
+
21
+ import io
22
+
23
+
24
+
25
+ data = (
26
+
27
+ '''
28
+
29
+ 保有数量 取得単価 現在値 外貨建評価損益 商品 Totalamount % 差分
30
+
31
+ 2 119.16 118.23 -1.86 AGG 236.46 5.133794331 -0.133794331
32
+
33
+ 2 187.2 176.7 -21 GLD 353.4 7.672684245 -0.172684245
34
+
35
+ 3 81.92 80.18 -5.22 IYR 240.54 5.222375406 -0.222375406
36
+
37
+ 35 34.54 41.06 228.2 VEA 1437.1 31.2009466 1.699053398
38
+
39
+ 10 148.65 169.99 213.4 VTI 1699.9 36.90660993 -1.906609928
40
+
41
+ 15 36.46 42.57 91.65 VWO 638.55 13.86358949 0.736410512
42
+
43
+ ''')
44
+
45
+
46
+
47
+ df_ja_result = pd.read_csv(io.StringIO(data.replace(' ', ',')))
48
+
49
+
50
+
51
+ print(df_ja_result)
52
+
53
+
54
+
55
+ # 購入すべきものの算出
56
+
57
+ mostbuy = df_ja_result[df_ja_result.差分 == df_ja_result.差分.max()].商品
58
+
59
+ mostbuy2 = mostbuy.iloc[0]
60
+
61
+ realcost = df_ja_result[df_ja_result.差分 == df_ja_result.差分.max()].現在値
62
+
63
+ print(realcost)
64
+
65
+ realcost2 = float(realcost.iloc[0])
66
+
67
+ print(mostbuy2)
16
68
 
17
69
  df_ja_result.保有数量 += (df_ja_result.差分 == df_ja_result.差分.max()).astype(int)
18
70
 
19
71
 
20
72
 
73
+ print(df_ja_result)
74
+
21
75
  ```
76
+
77
+
78
+
79
+ なお、質問者様のコードを実際に動かすと
80
+
81
+ SettingWithCopyWarning:
82
+
83
+ A value is trying to be set on a copy of a slice from a DataFrame.
84
+
85
+ Try using .loc[row_indexer,col_indexer] = value instead
86
+
87
+ というエラーが出て、報告されているエラーと違います。このエラーに基づいた回答をしています。
88
+
89
+
90
+
91
+ もしかしたら、DataFrameの作り方に問題があって、数値の中に文字列が含まれているのかもしれません。上記のコードでできる最初のDataFrameを、質問者様のDataFrameと比較確認してください。その際も、文字列数値にまつわるエラーが無くなった際に、このエラーが出てくると思います。