你好,我有一个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
答案 0 :(得分: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的问题。
答案 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。