当我将 pandas 数据框保存为 csv 文件时,3 位数字从 18 位长列中被截断
3 digits are truncated from an 18 digit long column when I save my pandas dataframe as a csv file
我从一个由 JSON 文件填充的字典创建了一个数据框。我的数据框中的 "id" 列包含 18 位整数。当我使用 python 打印 ids 时,该值等于 JSON 文件中的原始值,但是当我尝试将我的数据框保存为 csv 文件时,id 列以科学记数法保存,并且还有三个ids 右侧的数字将转换为零。
如何防止csv文件中的id值转换为科学计数法?
例如,当我查看 csv 时,id 得到 1.01045E+17
,当我看到值时,我得到 101044874404577000
,而 true值为 101044874404577281
这是我的代码:
with open(data_path, encoding="utf8") as input_file:
data = json.load(input_file)
df = pd.DataFrame.from_dict(data)
df.to_csv(output_path)
我曾尝试将列的格式从 astype
更改为 str
、object
和 float64
,但这没有帮助。
我已经设置 to_csv
函数的 float_format
参数来保存具有指定小数位数的浮点数。这也没有用。
问题不在于转换为 csv,而是在将其加载到电子表格时。众所周知,Excel 对 csv 文件的支持很差,不幸的是,LibreOffice calc 尽力模仿 Excel...
它看到一个数字并错误地将其转换为双精度值。
演示:
在python中:
>>> x = 101044874404577281
>>> data = [{"id": x, "str": "foo"}]
>>> fd = io.StringIO()
>>> json.dump(data, fd)
>>> fd.seek(0,0)
0
>>> df = pd.read_json(fd)
>>> print(df)
id str
0 101044874404577281 foo
好的,这里一切都很好。让我们继续:
>>> df.to_csv('foo.csv', index=False)
在哑文本编辑器中打开时,foo.csv如果仍然正常:
id,str
101044874404577281,foo
让我们将其加载到电子表格中:
calc 真丢人,它用科学记数法表示!让我们使用正常显示:
唉……最后的数字都毁了……
TL/DR:这在 Python 和 pandas 中都不是问题,甚至在 csv 文件中也不是问题,而只是在 Excel.
中
我从一个由 JSON 文件填充的字典创建了一个数据框。我的数据框中的 "id" 列包含 18 位整数。当我使用 python 打印 ids 时,该值等于 JSON 文件中的原始值,但是当我尝试将我的数据框保存为 csv 文件时,id 列以科学记数法保存,并且还有三个ids 右侧的数字将转换为零。 如何防止csv文件中的id值转换为科学计数法?
例如,当我查看 csv 时,id 得到 1.01045E+17
,当我看到值时,我得到 101044874404577000
,而 true值为 101044874404577281
这是我的代码:
with open(data_path, encoding="utf8") as input_file:
data = json.load(input_file)
df = pd.DataFrame.from_dict(data)
df.to_csv(output_path)
我曾尝试将列的格式从 astype
更改为 str
、object
和 float64
,但这没有帮助。
我已经设置 to_csv
函数的 float_format
参数来保存具有指定小数位数的浮点数。这也没有用。
问题不在于转换为 csv,而是在将其加载到电子表格时。众所周知,Excel 对 csv 文件的支持很差,不幸的是,LibreOffice calc 尽力模仿 Excel...
它看到一个数字并错误地将其转换为双精度值。
演示:
在python中:
>>> x = 101044874404577281
>>> data = [{"id": x, "str": "foo"}]
>>> fd = io.StringIO()
>>> json.dump(data, fd)
>>> fd.seek(0,0)
0
>>> df = pd.read_json(fd)
>>> print(df)
id str
0 101044874404577281 foo
好的,这里一切都很好。让我们继续:
>>> df.to_csv('foo.csv', index=False)
在哑文本编辑器中打开时,foo.csv如果仍然正常:
id,str
101044874404577281,foo
让我们将其加载到电子表格中:
calc 真丢人,它用科学记数法表示!让我们使用正常显示:
唉……最后的数字都毁了……
TL/DR:这在 Python 和 pandas 中都不是问题,甚至在 csv 文件中也不是问题,而只是在 Excel.
中