Pandas中大整数高精度求和异常,求解决方案
解决Pandas处理超大整数求和的问题
问题场景
读取包含超大整数的CSV文件my_file_lg_int时,Pandas自动将超长整数识别为字符串,直接求和会得到字符串拼接结果;指定dtype=int读取又会触发溢出错误。
输入文件内容:
my_int 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
执行原代码:
import pandas as pd file = 'my_file_lg_int' data = pd.read_csv(file) print(data['my_int'].sum())
得到错误结果(字符串拼接):
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
解决方案
核心思路是利用Python原生int支持任意精度的特性,绕过NumPy整数的大小限制。
方法一:先以object类型读取,再转换为Python原生整数求和
import pandas as pd file = 'my_file_lg_int' # 以object类型读取,避免自动转字符串或溢出 data = pd.read_csv(file, dtype={'my_int': object}) # 将每个元素转为Python原生int后求和 total = data['my_int'].apply(int).sum() print(total)
方法二:读取时直接用转换器转换为原生整数
import pandas as pd file = 'my_file_lg_int' # 读取时直接将字符串转为Python原生int data = pd.read_csv(file, converters={'my_int': int}) total = data['my_int'].sum() print(total)
两种方法都能得到正确的求和结果:333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
内容的提问来源于stack exchange,提问作者Stef1611
相关产品推荐
相关产品推荐

