如何摆脱熊猫将excel表中的大数转换为指数?

Posted

技术标签:

【中文标题】如何摆脱熊猫将excel表中的大数转换为指数?【英文标题】:how to get rid of pandas converting large numbers in excel sheet to exponential? 【发布时间】:2016-12-05 23:02:25 【问题描述】:

在 excel 表中,我有两列大数字。

但是当我用 read_excel() 读取 excel 文件并显示数据框时,

这两列以科学格式以指数形式打印。

如何摆脱这种格式?

谢谢

Pandas 中的输出

【问题讨论】:

为什么要这样做?你知道,在内部根本没有区别。这只是可视化/输出功能,它认为,缩短它是一个好主意。 是的,我同意,不习惯科学记数法..这就是为什么我更喜欢它的原始形式 由于其他原因,这实际上可能是非常有问题的。在我们的其中一个系统中,记录的 ID 用于数据库中的键。所以手动根据 pandas 输出查询数据库变得非常困难。此外,对于非常长的 ID,其中有很多零,例如 1000000000000000000000041,符号会忽略 41。 【参考方案1】:

科学记数法的应用方式是通过pandas的显示options控制的:

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

【讨论】:

我已经应用了这个display.precision,但它似乎影响了小数部分,这是我想要影响的整数部分 您能否举例说明 (i) 您想要实现的目标和 (ii) 您想要避免的目标? 好的,(i) 我想要我的 excel 文件中的确切值 (ii) 我想避免 pandas 以科学形式表示最后两列中的大数字 (imgur.com/a/9Ls6c) 我面临同样的问题,我在这里看不到任何人提供的解决方案。 @NathanielBabalola 如果您找到任何解决此问题的方法,请告诉我。

以上是关于如何摆脱熊猫将excel表中的大数转换为指数?的主要内容,如果未能解决你的问题,请参考以下文章

使用php和pear写入excel时如何避免大数的科学记数法

如何将大数(例如 1.23e29)转换为 IEEE 754 单精度浮点格式?

如何在 C++ 中将大数字符串转换为整数?

将熊猫数据框转换为具有以下格式的excel

大数数组的平衡索引,如何防止溢出?

js大数相加和大数相乘