四舍五入熊猫列科学数字

时间:2020-08-27 13:07:23

标签: python pandas dataframe

你好,我有一个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

3 个答案:

答案 0 :(得分:3)

您不希望舍入第一列中的值-舍入意味着低位数字消失了。我认为您实际想要做的是更改Pandas在屏幕上显示数据的方式,而不是数据框中的实际值。默认值已经是科学计数法。

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

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

由于您要保留第一列的格式,而不要保留第二列的格式,因此可能需要分别为每列设置格式。您可以将styling用于列2:

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

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

答案 1 :(得分:1)

假设您只想出于显示目的,可以设置

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

或仅在临时情况下这样做:

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

答案 2 :(得分:0)

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