差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
次のリビジョン両方とも次のリビジョン
programming:python:packages:pandas:format_output [2019/11/19] – [カラム毎に小数点以下を揃える] ikatakosprogramming:python:packages:pandas:format_output [2020/03/19] – [NaNを含むintカラム] ikatakos
行 43: 行 43:
 df['col'] = df['col'].fillna(-1).astype(int) df['col'] = df['col'].fillna(-1).astype(int)
 </sxh> </sxh>
 +
 +=== pandas.Int64Dtype型を使う ===
 +
 +未検証、pandas ver.0.24から導入された新しめの手法。
 +
 +numpyはnanを扱えないので、pandasのレイヤーでnanを扱えるint型を独自定義した感じ。
 +
 +ただ、floatからのキャストでエラーが出て、イマイチよく使い方がわかっていない。
 +
 +  * [[https://qiita.com/hkzm/items/52195729e9b00ae88789|pandas 1.0.0 (rc0) での pd.NA の特徴 - Qiita]]
 +
  
 =====カラムの選択・並べ替え===== =====カラムの選択・並べ替え=====
行 132: 行 143:
 </sxh> </sxh>
  
-===丸め方法についての注意===+====丸め方法についての注意====
  
 注意点として、NumPyのroundは偶数丸めであること。(参考: [[wpjp>端数処理]]) 注意点として、NumPyのroundは偶数丸めであること。(参考: [[wpjp>端数処理]])
行 138: 行 149:
 偶数丸めは、丸めた値が実際の値から上振れするか下振れするかの期待値を、なるべく均等にする目的で使われる。 偶数丸めは、丸めた値が実際の値から上振れするか下振れするかの期待値を、なるべく均等にする目的で使われる。
 よって、丸め結果の総和や平均を取る場合などは望ましい。 よって、丸め結果の総和や平均を取る場合などは望ましい。
 +しかし、丸め結果の差分が重要なデータなどでは、四捨五入の方が誤差が少なくなる場合もある(*)ため、使い分ける必要がある。
  
-しかし、丸め結果の差分が重要なデータなどでは、四捨五入の方が誤差が少なくなる場合もある(*)ため、使い分ける必要がある。 
 だが、PythonにもNumPyにも本来の四捨五入(xx.5は常に切り上げ)に相当する関数が無いんだよなあ。 だが、PythonにもNumPyにも本来の四捨五入(xx.5は常に切り上げ)に相当する関数が無いんだよなあ。
- 
 一応、標準モジュール Decimal.quantize() でDecimal型に変換することで、切り上げ方を選択できるが、変換が必要なことがネック。 一応、標準モジュール Decimal.quantize() でDecimal型に変換することで、切り上げ方を選択できるが、変換が必要なことがネック。
 1 で割ってあまりが 0.5 に等しいものは一律 0.01 を加算するみたいな方がいいかもしれん。 1 で割ってあまりが 0.5 に等しいものは一律 0.01 を加算するみたいな方がいいかもしれん。
行 148: 行 158:
  
   * (*) 検証方法   * (*) 検証方法
-  * $a=0.0~1.9,b=0.0~1.9$ の $a,b$ の組400通りにつき、小数点1桁目を丸めての $a'-b'$ と、元の $a-b$ との誤差は、+  * $0.0~1.9$ の0.1刻みの $(a,b)$ の組400通りにつき、小数点1桁目を丸めての $a'-b'$ と、元の $a-b$ との誤差は、
     * 偶数丸めで処理した結果: MAE=0.335, RMSE=0.4123     * 偶数丸めで処理した結果: MAE=0.335, RMSE=0.4123
     * 四捨五入で処理した結果: MAE=0.33, RMSE=0.4062     * 四捨五入で処理した結果: MAE=0.33, RMSE=0.4062
programming/python/packages/pandas/format_output.txt · 最終更新: 2021/12/09 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0