【发布时间】:2021-11-21 09:49:49
【问题描述】:
我创建了许多数据框,所有值都应该是小数点后 3 位。这就是它要做的事情,也是它上周所做的事情。 现在突然间,当我今天早上运行我的 Jupyter 笔记本时,它会将我所有数据框中的所有内容四舍五入为整数。
我不知道为什么。熊猫有什么变化吗,有没有我可以改变的设置?当我打印所有列的 dtypes 时,它说它们是浮动的,我尝试在数据帧上使用 round 但它没有做任何事情。这就是我的意思:
上周的样子:
Jan 2021 Feb 2021 Jul 2021 Aug 2021
A 0.7 0.938 0.80 0.75
B 0.3 0.062 0.08 0.20
C 0.0 0.0 0.12 0.05
D 0.0 0.0 0.0 0.0
我从上周的 Jupyter 笔记本中恢复到一个检查点,并且能够看到它上次运行的时间并且可以看到这些数字,但是即使我在恢复到旧的检查点后运行它,这个新的变化是那里,这就是它现在的样子(今天早上我运行它时没想到会出现这个问题,当我重新运行几天前没有这个问题的前一个版本时):
Jan 2021 Feb 2021 Jul 2021 Aug 2021
A 1 1 1 1
B 0 0 0 0
C 0 0 0 0
D 0 0 0 0
所以我想知道 Pandas 是否发生了一些变化?这事发生在别人身上过吗?同样重要的是要注意,当我打印每个列表时,这些列是由这些值组成的,它们仍然显示第一个数据帧中的正确数字,小数点后 3 位
编辑:
用于创建数据框列的代码:
deca=round((len(decemberprediction[decemberprediction['COST_TYPE_A']==1])/len(decemberprediction)),3)
decb=round((len(decemberprediction[decemberprediction['COST_TYPE_B']==1])/len(decemberprediction)),3)
decc=round((len(decemberprediction[decemberprediction['COST_TYPE_C']==1])/len(decemberprediction)),3)
decd=round((len(decemberprediction[decemberprediction['COST_TYPE_D']==1])/len(decemberprediction)),3)
deccontractmix=[deca, decb,decc,decd] 打印(deccontractmix)
它应该返回 [0.643, 0.25, 0.036, 0.0]
然后为了创建数据框,我拥有所有其他月份的列,这些列也具有该结果列表以及它们自己的值,然后执行:
predcontractmix=pd.DataFrame([[jancontractmix[0],febcontractmix[0],julcontractmix[0],augcontractmix[0],sepcontractmix[0],octcontractmix[0],novcontractmix[0],deccontractmix[0]],
[jancontractmix[1],febcontractmix[1],julcontractmix[1],augcontractmix[1],sepcontractmix[1],octcontractmix[1],novcontractmix[1],deccontractmix[1]],
[jancontractmix[2],febcontractmix[2],julcontractmix[2],augcontractmix[2],sepcontractmix[2],octcontractmix[2],novcontractmix[2],deccontractmix[2]],
[jancontractmix[3],febcontractmix[3],julcontractmix[3],augcontractmix[3],sepcontractmix[3],octcontractmix[3],novcontractmix[3],deccontractmix[3]]], columns=['Jan 2021', 'Feb 2021','Jul 2021','Aug 2021','Sept 2021', 'Oct 2021', 'Nov 2021','Dec 2021'])
predcontractmix.index=contractlabels
predcontractmix=pd.merge(predcontractmix,contractmix, left_on=predcontractmix.index, right_on=contractmix.index, how='outer')
predcontractmix=predcontractmix.rename(columns={'key_0':'Contract Type'})
predcontractmix=predcontractmix.set_index('Contract Type')
print('\nContract Mix percent,median')
predcontractmix.head(6)
合并是一个类似的数据框,它具有相同的行,但只有 2 个 ytd 列
【问题讨论】:
-
另外需要注意的是,从上周按预期工作到现在,我没有更改此笔记本中的任何一行代码
-
pd.options.display.float_format -
你试过了吗?
%precision %.3f然后重新运行数据帧 -
这个数据是两个整数相除产生的吗?
-
听起来您在某处将显示精度设置为 0。可以重现此行为的代码会很有帮助。是否有环境设置发生了变化等? Setting startup options in Python/IPython environment
标签: python pandas dataframe jupyter-notebook floating-point