这个问题紧接着这个问题:Problem in Pandas : impossible to do sum of int with arbitrary precision,我使用了此处的公认答案:第一个月
但它并非在所有情况下都有效。
例如,对于此文件
my_int
9220426963983292163
5657924282683240
输出为-9220659185443576213
在看了apply(int)
的输出之后,我理解了问题所在,在本例中,apply(int)
返回dtype:int64
。
0 9220426963983292163
1 5657924282683240
Name: my_int, dtype: int64
但是对于较大的数字,它返回dtype:object
:
0 1111111111111111111111111111111111111111111111...
1 2222222222222222222222222222222222222222222222...
Name: my_int, dtype: object
有可能用Pandas来解决吗?或者我应该按照上一个问题的Tim Robert's answer来解决?
编辑1:
糟糕的解决方案。在文件末尾添加一行大整数
my_int
9220426963983292163
5657924282683240
11111111111111111111111111111111111111111111111111111111111111111111111111
之后,对除最后一行之外的所有行进行求和:
data['my_int'].apply(int).iloc[:-1].sum()
2条答案
按热度按时间kzipqqlq1#
使用Pandas的解决方案:
"我为什么这么说"
df1
:df2
:令S1和S2分别表示
df1
和df2
中的列my_int
中的元素的总和:如果我们查看NumPy on Overflow错误的文档,我们会发现NumPy提供的精度有限:
可表示的最大数小于S1和S2。
该解决方案没有任何问题,并给出正确的总和:
编辑:首选
sum
而非np.sum
:my_int
列中元素总和的计算来源是Wolfram Alpha:df1,df2hgb9j2n62#
溶液:
apply(int)
:避免字符串与大数字串联。astype(object)
:将int64
转换为object
。