回答編集履歴

1

修正

2022/09/23 16:53

投稿

can110
can110

スコア38262

test CHANGED
@@ -1,6 +1,6 @@
1
1
  原因は列の型が`float16`だからです。これは`print(df_train['P_2'].dtype)`などとすることで確認できます。
2
2
  おそらく読込元のファイルはサイズ節約のためにこの型で格納しているのだと思います。
3
- この型は最大も65000程度までしか表現できませんので各行の値はその範囲内に収まっていても、合計を計算した時点で`inf`になり、その結果平均は`nan`になります。
3
+ この型は有効桁数が3、最大も65000程度までしか表現できませんので各行の値はその範囲内に収まっていても、合計を計算した時点で`inf`になり、その結果平均は`nan`になります。
4
4
 
5
5
  対策としては大規模データを処理する場合は、メモリ使用量とのかねあいもありますが`float64`など十分なサイズの型に変換するとよいでしょう。
6
6
  以下単純例での再現コードです。
@@ -30,4 +30,16 @@
30
30
  ---------------------------------------------------------------
31
31
  """
32
32
  ```
33
+ `float64`変換後
34
+ ```PlainText
35
+ P_2 D_39 B_1 B_2 R_1 \
36
+ count 455944.000000 4.589130e+05 458913.000000 4.588820e+05 4.589130e+05
37
+ mean 0.635249 2.014894e-01 0.139027 5.916118e-01 1.073955e-01
38
+ std 0.267547 4.021555e-01 0.231267 4.121448e-01 2.786378e-01
39
+ min -0.458984 5.960464e-08 -3.570312 1.788139e-07 5.960464e-08
40
+ 25% 0.449219 4.783630e-03 0.008987 7.092285e-02 2.956390e-03
41
+ 50% 0.682617 9.559631e-03 0.033234 8.134766e-01 5.920410e-03
42
+ 75% 0.862305 2.666016e-01 0.153687 1.001953e+00 8.888245e-03
43
+ max 1.009766 5.000000e+00 1.324219 1.009766e+00 2.759766e+00
44
+ ```
33
45