慕碼人8056858
2021-11-02 20:24:49
我編寫了以下代碼來四舍五入數據幀中的浮動值 aa = pd.DataFrame([[1.2,3.4],[1.4,4.6]])a = a.apply(round)但我得到的輸出如下: 0 10 1.0 3.01 1.0 5.0為什么函數返回四舍五入的浮點值而不是整數?此外,在應用如下時,行為是不同的:round(0.5)>>0x= [1.4,2.5,3.6]list(map(round,x))>>[1, 2, 4]為什么會出現這種異常?
2 回答

蕭十郎
TA貢獻1815條經驗 獲得超13個贊
applyround連續調用每一列上的函數。DataFrame 列是Series對象,這些__round__列上定義了一個dunder 方法,其行為略有不同。這實際上是round調用Series.
round(a[0])
0 1.0
1 1.0
Name: 0, dtype: float64
# Same as,
a[0].__round__()
0 1.0
1 1.0
Name: 0, dtype: float64
將此與 Pythonround在標量上的典型行為進行對比:
round(1.5)
# 2
# Same as,
(1.5).__round__()
# 2
如果您想要相同的行為,請使用applymap.
a.applymap(round)
0 1
0 1 3
1 1 5
這適用round于每個元素(標量),向下取整為整數。
或者,我推薦的解決方案,
a.round().astype(int)
0 1
0 1 3
1 1 5
請注意,這不會對包含缺失數據 (NaN) 的列進行類型轉換。
添加回答
舉報
0/150
提交
取消