我在使用pandas.read_csv
讀取CSV概率時遇到問題;其中一些值與> 1.0
一起作爲浮點數讀取。瞭解pandas.read_csv()浮動解析
具體而言,我感到困惑的以下行爲:
>>> 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
有一個參數float_precision
,可以用來選擇「的轉換器的C發動機應使用浮點值」,而這個設置爲'high'
確實解決了我的問題。
不過,我想了解的默認行爲:
- 我在哪裏可以找到默認的浮動轉換器的源代碼?
- 我在哪裏可以找到有關默認浮動轉換器的預期行爲以及其他可能的選擇的文檔?
- 爲什麼最小有效位置的單個數字變化會跳過一個值?
- 爲什麼這個行爲是非單調的?
編輯關於「重複問題」:這不是重複的。我意識到浮點數學的侷限性。我是專門詢問有關大熊貓的默認解析機制,因爲內置float
不顯示此行爲:
>>> float("0.99999999999999999")
1.0
...並我找不到文檔。
可能重複[浮點數學是否被破壞?](https://stackoverflow.com/questions/588004/is-floating-point-math-broken) – pvg
@pvg,這不是一個騙局。 OP已經認真地演示了非單調行爲,並且從某些照明中提出要求,以便他們能夠高效地使用它。 –
@StephenRauch它是一個愚蠢的或有相關的愚蠢。看看所需的精度和結果,這些都小於ieee double的epsilon。這不是一個明智的經營場所。 – pvg