本文介紹了pandas 中的 .sum() 方法給出的結(jié)果不一致的處理方法,對(duì)大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我有一個(gè)大的 DataFrame(大約 4e+07 行).
I have a large DataFrame (circa 4e+07 rows).
求和時(shí),我得到 2 個(gè)明顯不同的結(jié)果,無論我是在在列選擇之前還是之后進(jìn)行求和.
此外,類型從 float32 更改為到 float64,即使總數(shù)都低于 2**31
When summing it, I get 2 significantly different results whether I do the sum before or after the column selection.
Also, the type changes from float32 to float64 even though totals are all below 2**31
df[[col1, col2, col3]].sum()
Out[1]:
col1 9.36e+07
col2 1.39e+09
col3 6.37e+08
dtype: float32
df.sum()[[col1, col2, col3]]
Out[2]:
col1 1.21e+08
col2 1.70e+09
col3 7.32e+08
dtype: float64
我顯然遺漏了一些東西,有人遇到過同樣的問題嗎?
I am obviously missing something, has anybody had the same issue?
感謝您的幫助.
推薦答案
使用 np.float32
相對(duì)于 np.float64
可能會(huì)丟失精度
You can lose precision with np.float32
relative to np.float64
np.finfo(np.float32)
finfo(resolution=1e-06, min=-3.4028235e+38, max=3.4028235e+38, dtype=float32)
和
np.finfo(np.float64)
finfo(resolution=1e-15, min=-1.7976931348623157e+308, max=1.7976931348623157e+308, dtype=float64)
一個(gè)人為的例子
df = pd.DataFrame(dict(
x=[-60499999.315, 60500002.685] * int(2e7),
y=[-60499999.315, 60500002.685] * int(2e7),
z=[-60499999.315, 60500002.685] * int(2e7),
)).astype(dict(x=np.float64, y=np.float32, z=np.float32))
print(df.sum()[['y', 'z']], df[['y', 'z']].sum(), sep='
')
y 80000000.0
z 80000000.0
dtype: float64
y 67108864.0
z 67108864.0
dtype: float32
這篇關(guān)于pandas 中的 .sum() 方法給出的結(jié)果不一致的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!
【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請(qǐng)聯(lián)系我們刪除處理,感謝您的支持!