【问题标题】:Round in pandas column scientific numbersPandas 列科学数字中的四舍五入
【发布时间】:2020-12-16 09:05:17
【问题描述】:

您好,我有一个 df,例如:

COL1        COL2
0.005554    0.35200000000000004
5.622e-11   0.267
0.006999999999999999    0.307
2.129e-14   0.469
2.604e-14   0.39
1.395e-60   0.27899999999999997
8.589999999999998e-74   0.29600000000000004
1.025e-42   0.4270000000000001

我知道如何在 COL2 中使用四舍五入

df['COL2'] = df['COL2'].round(3)

但如果我对 COL1 执行相同操作,它只会显示 0

我怎样才能得到:

COL1        COL2
0.005   0.352
5.622e-11   0.267
0.007   0.307
2.129e-14   0.469
2.604e-14   0.39
1.395e-60   0.279
8.560e-74   0.296
1.025e-42   0.427

其实大问题就在这里:

它显示:8.589999999999998e-74 我想在昏迷后只保留 3 个数字

8.590e-74

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    结果数据帧的第 1 行和第 3 行是否也是 0? 因为所有其他行在四舍五入到小数点后 3 时都是 0,因为 5.622e-11 是 0.00000000005622,因此四舍五入到小数点后 3 位是 0。

    【讨论】:

    • 这更像是一条评论。请考虑在问题下重新定位它。
    • 这是我最初想做的,但不幸的是我的声誉仍然很低。
    【解决方案2】:

    假设你只是为了显示目的,你可以设置

    pd.options.display.precision = 3
    print(df)
    

    或仅在临时环境中这样做:

    with pd.option_context('display.precision', 3):
        print(df)
    

    【讨论】:

    • 我需要使用 to_csv 保存数据帧,所以它不是用于显示的目的
    【解决方案3】:

    您不想对第一列中的值进行四舍五入——四舍五入意味着低位数字消失了。我认为您真正想要做的是更改 Pandas 在屏幕上 显示数据的方式,而不是数据框中的实际值。默认已经是科学记数法了。

    您可以像这样指定所有列的显示格式(这将显示点后的前三位):

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

    由于您想保留第一个而不是第二个的格式,您可能需要单独设置每一列的格式。您可以将styling 用于第 2 列:

    df.style.format({'COL2': '{:.3f}')
    

    编辑:由于您的答案是保存为 CSV,因此您需要将此作为参数传递给 to_csv:float_format='{:.3E}'。这将以科学计数法保存所有列。如果您只希望第 1 列使用此功能,您可以尝试this question 的解决方案。

    【讨论】:

      猜你喜欢
      • 2015-11-12
      • 2021-08-10
      • 1970-01-01
      • 2019-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-17
      相关资源
      最近更新 更多