gpt4 book ai didi

python - 如何在 `DataFrame.to_json` 期间获得 float 的精确表示?

转载 作者:行者123 更新时间:2023-12-04 11:56:32 25 4
gpt4 key购买 nike

我观察到以下行为 DataFrame.to_json :

>>> df = pd.DataFrame([[eval(f'1.12345e-{i}') for i in range(8, 20)]])
>>> df
0 1 2 3 4 5 6 7 8 9 10 11
0 1.123450e-08 1.123450e-09 1.123450e-10 1.123450e-11 1.123450e-12 1.123450e-13 1.123450e-14 1.123450e-15 1.123450e-16 1.123450e-17 1.123450e-18 1.123450e-19
>>> print(df.to_json(indent=2, orient='index'))
{
"0":{
"0":0.0000000112,
"1":0.0000000011,
"2":0.0000000001,
"3":0.0,
"4":0.0,
"5":0.0,
"6":0.0,
"7":0.0,
"8":1.12345e-16,
"9":1.12345e-17,
"10":1.12345e-18,
"11":1.12345e-19
}
}
所以所有数字都下降到 1e-16似乎四舍五入到小数点后 10 位(与 double_precision 的默认值一致),但所有较小的值都精确表示。为什么会出现这种情况,我该如何关闭较大值的小数舍入(即改用科学记数法)?

>>> pd.__version__
'1.3.1'

作为引用,标准库的 json module不这样做:
>>> import json
>>> print(json.dumps([eval(f'1.12345e-{i}') for i in range(8, 20)], indent=2))
[
1.12345e-08,
1.12345e-09,
1.12345e-10,
1.12345e-11,
1.12345e-12,
1.12345e-13,
1.12345e-14,
1.12345e-15,
1.12345e-16,
1.12345e-17,
1.12345e-18,
1.12345e-19
]

最佳答案

我不确定是否可以通过 pd.DataFrame.to_json 实现这一点,但我们可以使用 pd.DataFrame.to_dict , json , 和 pd.read_json从 Pandas 数据帧实现全精度 json 表示。

json_df = json.dumps(df.to_dict('index'), indent=2)
>>> print(json_df)
{
"0": {
"0": 1.12345e-08,
"1": 1.12345e-09,
"2": 1.12345e-10,
"3": 1.12345e-11,
"4": 1.12345e-12,
"5": 1.12345e-13,
"6": 1.12345e-14,
"7": 1.12345e-15,
"8": 1.12345e-16,
"9": 1.12345e-17,
"10": 1.12345e-18,
"11": 1.12345e-19
}
}
要重新读取它,我们可以执行以下操作:
>>> pd.read_json(json_df, orient='index')
0 1 2 ... 9 10 11
0 1.123450e-08 1.123450e-09 1.123450e-10 ... 1.123450e-17 1.123450e-18 1.123450e-19

[1 rows x 12 columns]

关于python - 如何在 `DataFrame.to_json` 期间获得 float 的精确表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68906112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com