如何解决Pandas在Excel表格中将大数字转换为指数形式的问题?

32
在Excel表格中,我有两列包含大量数字。
但是当我用read_excel()读取Excel文件并显示数据框时,
这两列以科学计数法的指数形式打印出来。
我该如何摆脱这种格式?
谢谢
Pandas输出

enter image description here


你为什么想要这样做呢?你知道,在内部完全没有任何区别。只是可视化/输出函数认为缩短它是个好主意。 - sascha
是的,我同意,不习惯科学计数法...这就是为什么我更喜欢它的原始形式。 - Nathaniel Babalola
6
这实际上可能会因其他原因而导致问题。在我们的某个系统中,所记录的 ID 是数据库中键的标识。因此,根据 Pandas 的输出手动查询数据库变得非常困难。此外,对于像 1000000000000000000000041 这样有很多零的非常长的 ID,这种标注方法会遗漏最后两位的数字 41。 - John Humphreys
2个回答

35

科学计数法的应用是通过pandas的显示选项来控制的:

pd.set_option('display.float_format', '{:.2f}'.format)
df = pd.DataFrame({'Traded Value':[67867869890077.96,78973434444543.44],
                   'Deals':[789797, 789878]})
print(df)
       Traded Value   Deals
0 67867869890077.96  789797
1 78973434444543.44  789878

如果这仅仅是为了呈现效果,您可以按列将数据转换为字符串进行格式化:

df = pd.DataFrame({'Traded Value':[67867869890077.96,78973434444543.44],
                   'Deals':[789797, 789878]})
df

    Deals   Traded Value
0   789797  6.786787e+13
1   789878  7.897343e+13


df['Deals'] = df['Deals'].apply(lambda x: '{:d}'.format(x))
df['Traded Value'] = df['Traded Value'].apply(lambda x: '{:.2f}'.format(x))
df    

     Deals       Traded Value
0   789797  67867869890077.96
1   789878  78973434444543.44

一种更简单的替代方法是在代码顶部加入以下行,它将仅格式化浮点数:

pd.options.display.float_format = '{:.2f}'.format

1
我已经使用了 display.precision,但它似乎只影响小数部分,我想要影响整数部分。 - Nathaniel Babalola
请问您能否举个例子说明 (i) 您想要实现什么,以及 (ii) 您想要避免什么? - Sergey Bushmanov
3
好的,(i)我想要从我的Excel文件中获得精确的数值。(ii)我想避免使用pandas在最后两列中以科学计数法表示大数。(http://imgur.com/a/9Ls6c) - Nathaniel Babalola
我也遇到了同样的问题,但是我没有看到有人在这里提供解决方案。@NathanielBabalola,你能告诉我是否已经找到了解决这个问题的方法吗? - Amit

0
尝试使用“{:.0f}”与Sergeys,对我有效。

目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

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