pandas.read_csv
を使用してCSVから確率を読み取る際に問題があります。値の一部は> 1.0
で浮動小数点として読み込まれます。pandas.read_csv()float解析の理解
具体的には、私は次の動作について混乱しています:
>>> pandas.read_csv(io.StringIO("column\n0.99999999999999998"))["column"][0]
1.0
>>> pandas.read_csv(io.StringIO("column\n0.99999999999999999"))["column"][0]
1.0000000000000002
>>> pandas.read_csv(io.StringIO("column\n1.00000000000000000"))["column"][0]
1.0
>>> pandas.read_csv(io.StringIO("column\n1.00000000000000001"))["column"][0]
1.0
>>> pandas.read_csv(io.StringIO("column\n1.00000000000000008"))["column"][0]
1.0
>>> pandas.read_csv(io.StringIO("column\n1.00000000000000009"))["column"][0]
1.0000000000000002
デフォルトフロート-解析する行動は、非単調であると思われる、と0.9...
を開始特に、いくつかの値が1.0
より厳密に大きいフロートに変換され、例えば問題を引き起こすsklearn.metrics
にそれらを供給するとき。
documentationはread_csv
は、「Cエンジンは、浮動小数点値のために使用すべきコンバータ」を選択するために使用できるパラメータfloat_precision
を持っていることを述べ、及び'high'
にこれを設定すると、確かに私の問題を解決します。
しかし、私は、デフォルトの動作を理解したいと思います:
-
私はデフォルトのフロートコンバータのソースコードを見つけることができます
- ?
- デフォルトのフロートコンバータと他の選択肢の意図された動作に関するドキュメントはどこにありますか?
- 最下位位置の単数形の変更が値をスキップするのはなぜですか?
- なぜこれは単調に動作しませんか?
「重複する質問」に関する編集:これは重複していません。私は浮動小数点数学の限界を認識しています。
>>> float("0.99999999999999999")
1.0
...と私はドキュメントを見つけることができませんでした:組み込みfloat
は、この動作を示していないので、私は具体的には、パンダのデフォルトの解析メカニズムについて尋ねました。
[浮動小数点数学は壊れていますか?](https://stackoverflow.com/questions/588004/is-floating-point-math-broken) – pvg
@pvg、これは欺瞞ではありません。 OPは非単調な挙動を注意深く実証しており、生産的に作業できるようにいくつかの照明を求めています。 –
@StephenRauchそれは偽薬か関連する偽薬です。希望の精度と結果を見てみると、これらはすべてieee doubleのイプシロンよりも小さい。それは実際に操作するのに賢明な場所ではありません。 – pvg