Numpy将大整数保存为浮点数

Numpy将大整数保存为浮点数,numpy,Numpy,我在numpy将大整数保存为浮点数时遇到问题。这里有一个简单的例子,首先我制作一个大整数的numpy数组 来自随机导入randint 将numpy作为np导入 min_int=182_134_926_853_412_476 rand_big_int=[randint(min_int,2*min_int)表示范围(10)] np\u rand\u big\u ints=np.array(rand\u big\u ints) 我检查这些是INT 数组([2526847924891594972476

我在numpy将大整数保存为浮点数时遇到问题。这里有一个简单的例子,首先我制作一个大整数的numpy数组

来自随机导入randint
将numpy作为np导入
min_int=182_134_926_853_412_476
rand_big_int=[randint(min_int,2*min_int)表示范围(10)]
np\u rand\u big\u ints=np.array(rand\u big\u ints)
我检查这些是INT

数组([252684792489159497247692926601611023223174123368132841,
255596017185852990, 318647893588684448, 331851729687912180,
191223276914989801, 239394981298569364, 199835758154280122,
313714064550926566],数据类型=int64)
然后我使用numpy的
savetxt
函数保存它们

np.savetxt('rand\u big\u ints.csv',np\u rand\u big\u ints,分隔符=','))
但是,当我检查生成的CSV时,大整数已在CSV中呈现为浮点数,从而丢失信息

2.526847924891594880e+17
2.476929266016110080e+17
2.231741233681328320e+17
2.555960171858529920e+17
3.186478935886844160e+17
3.318517296879121920e+17
1.912232769149897920e+17
2.393949812985693760e+17
1.998357581542801280e+17
3.137140645509265920e+17

我可以通过将数组转换为pandas系列然后保存来解决这个问题,但是我如何让numpy尊重“type”而不将大整数呈现为浮点数呢?

您需要将值格式化为字符串

np.savetxt('rand_big_ints.csv', np_rand_big_ints.astype(str), fmt='"%s"', delimiter=',')

fmt='%s'
如果您将文件视为文本,也可以使用,但电子表格工具不支持大整数,因此它们会再次截断值以使其浮动

只需指定整数格式:

np.savetxt('rand_big_ints.csv', np_rand_big_ints, fmt='%d', delimiter=',')

使用Excel,您可以停止在“数据导入”对话框中将大整数更改为浮点。我经常用这个把戏。