Pandas json 转换与浮点精度混淆
Pandas json conversion messing with float precision
使用 to_json()
将 DataFrame 保存为 json 字符串后,当 json 转换回使用 read_json()
的 DataFrame 时,初始和结果 DataFrame 是不等于。我知道使用 np.isclose()
存在转换问题,但由于目标是将 DataFrame 保存在文件中供以后使用,是否有办法防止这些不准确?
请注意,这是一个最小的可复制示例,但真实数据包含非常精确的浮点数。
创建 DataFrame 并进行转换:
initialDF = pd.DataFrame({
'int':[1, 2, 3, 4, 5],
'f':[0.3, 0.05, 0.888, 152.1, 8.12]
})
jsonString = initialDF.to_json()
resultDF = pd.read_json(jsonString)
结果:
>>> print(initialDF.equals(resultDF))
False
>>> initialDF.loc[0, 'f']
0.3
>>> resultDF.loc[0, 'f']
0.30000000000000004
只需添加 precise_float=True
resultDF = pd.read_json(jsonString,precise_float=True)
使用 to_json()
将 DataFrame 保存为 json 字符串后,当 json 转换回使用 read_json()
的 DataFrame 时,初始和结果 DataFrame 是不等于。我知道使用 np.isclose()
存在转换问题,但由于目标是将 DataFrame 保存在文件中供以后使用,是否有办法防止这些不准确?
请注意,这是一个最小的可复制示例,但真实数据包含非常精确的浮点数。
创建 DataFrame 并进行转换:
initialDF = pd.DataFrame({
'int':[1, 2, 3, 4, 5],
'f':[0.3, 0.05, 0.888, 152.1, 8.12]
})
jsonString = initialDF.to_json()
resultDF = pd.read_json(jsonString)
结果:
>>> print(initialDF.equals(resultDF))
False
>>> initialDF.loc[0, 'f']
0.3
>>> resultDF.loc[0, 'f']
0.30000000000000004
只需添加 precise_float=True
resultDF = pd.read_json(jsonString,precise_float=True)