Pandas整数Series执行幂运算时结果异常问题咨询
Pandas整数型Series幂运算结果异常的原因
在标准Python中计算42**42可得到正确结果:150130937545296572356771972164254457814047970568738777235893533016064。但在Pandas中,浮点型Series执行s**42结果正常,整数型Series执行该运算时结果明显错误,示例代码如下:
# Pandas series, float dtype s = pd.Series([12, 42], index=range(2), dtype=float) s**42 # 0 2.116471e+45 # 1 1.501309e+68 # dtype: float64 # Pandas series, integer dtype s = pd.Series([12, 42], index=range(2), dtype=int) s**42 # 0 0 # 1 4121466560160202752 # dtype: int64
原因分析
- 标准Python的
int是任意精度整数,会根据数值大小自动扩展存储空间,因此能精准计算并存储超大整数结果。 - Pandas的整数型Series默认使用固定宽度的int64类型,它的取值上限为
9223372036854775807,而42**42的结果远超出这个范围,运算时发生整数溢出,超出部分被截断,最终得到错误的结果。 - 浮点型Series采用float64类型,虽然它的整数精度有限(只能精确表示到2^53以内的整数),但支持用科学计数法表示更大范围的数值,所以结果看起来“正常”(注意这只是近似值,并非精确整数)。
内容的提问来源于stack exchange,提问作者Jérôme
相关产品推荐
相关产品推荐

