【问题标题】:My pandas dataframe all of a sudden won't show me decimal numbers? Did something change in pandas?我的熊猫数据框突然不会显示十进制数字?熊猫有什么变化吗?
【发布时间】: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


【解决方案1】:

我能够解决问题,为将来遇到相同问题的任何人回答:

我尝试了所有这些方法,但它们都不适合我:

  • 将 pd.options.display.float_format 添加到我的笔记本顶部
  • 将 %precision %.3f 添加到我的笔记本顶部
  • 将 pd.set_option("precision", 5) 添加到我的笔记本顶部

最后对我有用的是将这个添加到我的笔记本顶部:

  • pd.options.display.float_format = '{:,.3f}'.format

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-15
    • 2020-06-03
    • 2015-05-16
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 2021-02-26
    • 2021-11-09
    相关资源
    最近更新 更多