删除数据框中的科学记数法浮点数

问题描述

我从一个来源收到不同的系列。其中一些系列的价值很大(X 十亿)。然后我将所有系列组合到一个数据框中,每个系列都有单独的列。

现在,当我打印数据框时,系列中的大数字以科学计数法显示。即使单独打印该系列也会以科学记数法显示数字。

Dataframe df(多索引)输出为:

                 Values
Item    Sub                  
A       1        1.396567e+12
B       1        2.868929e+12

我已经试过了:

pd.set_option('display.float_format',lambda x: '%,.2f' % x)

这不起作用:

  • 它可以在任何地方进行转换。我只需要在该特定数据框中进行转换。
  • 它尝试转换各种浮点数,而不仅仅是科学中的浮点数。因此,即使浮点数为 89.142,它也会尝试转换格式,并且由于没有数字可以放置 ',',它会显示错误

然后我尝试了这些:

df.round(2)

这仅将数字浮点数从现有的 3 位小数转换为 2 位小数。没有对科学价值做任何事情。

然后我尝试了:

df.astypes(floats)

不做任何可见的事情。输出保持不变。

我们还能如何将科学记数法更改为数据帧内的普通浮点数。我不想用转换后的值创建一个新列表。数据框本身应以正常方式显示值。

你们能帮我找到解决办法吗?

谢谢。

解决方法

试试 df['column'] = df['column'].astype(str) 。如果不起作用,您应该在从您的数据创建熊猫数据框之前将数字类型更改为字符串

,

我建议将所有内容保留为 float 类型并调整显示设置。 例如,我用一些随机数生成了一个 df

df = pd.DataFrame({"Item": ["A","B"],"Sub": [1,1],"Value": [float(31132314122123.1),float(324231235232315.1)]})
#  Item  Sub         Value
#0    A    1  3.113231e+13
#1    B    1  3.242312e+14

如果我们 print(df),我们可以看到 Sub 值为 intsValue 值为 floats

Item      object
Sub        int64
Value    float64
dtype: object

然后您可以调用 pd.options.display.float_format = '{:.1f}'.format 来取消 floats 的科学记数法,同时保留 float 格式。

#  Item  Sub             Value
#0    A    1  31132314122123.1
#1    B    1 324231235232315.1
Item      object
Sub        int64
Value    float64
dtype: object

如果您想要恢复科学记数法,可以调用 pd.reset_option('display.float_format')

,

好的。我发现了一个叫做 option_context for pandas 的东西,它允许使用 with 语句更改特定情况/操作的显示选项。

with pd.option_context('display.float_format',{:.2f}.format):
    print(df)

因此,我们不必再次重置选项,并且文件中所有其他数据的选项都保持默认。

遗憾的是,我找不到以不同浮点格式存储不同列的方法(例如,一列带有货币 - 逗号分隔和 2 位小数,而下一列以百分比表示 - 非逗号和 2 位小数。)