Pandas - 读取CSV科学计数法大数字

3

我试图使用pandas读取一个包含科学计数法的csv文件。

当它读取这些值时,它没有捕获到真正的底层数字。当我重新使用数据时,真实值会丢失。

df = pd.read_csv('0_IDI_Submitter_out.csv')

我试图保留的基本真值如下:

      INPUT: Extra 1
0     8921107
1     56300839420000
2     56207557000000

然而,pandas将其读取为:
 INPUT: Extra 1
0     8921107
1     5.63008E+13
2     5.62076E+13

如果我尝试编写新的csv或使用这些数据,数值将显示为:
 INPUT: Extra 1
0     8921107
1     56300800000000
2     56207600000000

我该如何让pandas读取真实数字而不是科学记数法,因为这会导致转换错误?


如何解决Pandas将Excel表格中的大数转换为指数形式的问题 - undefined
1
@brokenfoot 我相信那只是用于显示目的,没有解决我的问题。在我的情况下,值确实被pandas修改了。 - undefined
无法复现。您展示的数字可以用np.int64表示,并且pandas可以成功读取它们。请以纯文本形式展示完整的csv文件。如果您是从Excel中编写的,问题可能出在那里... - undefined
3个回答

4
问题似乎是在Excel中打开包含大数值或外观上像大数值的字符串(如产品代码、SKU、UPC等)的CSV文件时,它们会自动转换为科学计数法。一旦这样做了,你就必须手动进入Excel并重新进行格式化,但是尝试从Pandas进行此操作似乎是不可能的,并且数据完整性会丢失。
然而,如果我从未在Excel中打开文件,纯粹通过Pandas工作,那么一切都很好。同样,如果你纯粹在Excel中工作,也没问题。
我的最终结论是,在处理像产品代码或UPC这样的大数字或外观上像大数字的字符串时,最好不要将pandas与Excel混合使用。作为替代方案,我开始将所有数据框保存为pickle文件,而不是csv。
希望这有助于未来的任何人。
谢谢

此外,为了检查Excel如何保存您的值,请在记事本等文本编辑器中打开CSV文件,并检查其中的内容,因为这正是pandas将要读取的内容。您可能会注意到,在CSV中,科学计数法表示的数字并不包含完整的信息。 - undefined

3

看起来我无法重现您的问题,但也许这个方法会起作用?

df = pd.read_csv('0_IDI_Submitter_out.csv', dtype={'INPUT: Extra 1':np.object_})

此外,请检查您的数据框的数据类型:
result = df.dtypes
print(result)

0
将数据保存为Excel (.xlsx)文件而不是CSV文件,并通过Pandas读取对我来说很有效。
import pandas as pd

df = pd.read_excel('0_IDI_Submitter_out.xlsx')
df.head()

这样可以保留原始数据中的精确值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接