如果小数为0,熊猫会将float转换为int

时间:2019-09-30 11:23:16

标签: python-3.x pandas dataframe

我有一个pandas数据框,其中某些列具有数值,而其他列则没有,如下所示:

City          a     b       c
Detroit       129   0.54    2,118.00
East          188   0.79    4,624.4712
Houston       154   0.65    3,492.1422
Los Angeles   266   1.00    7,426.00
Miami         26    0.11    792.18
MidWest       56    0.24    772.7813

我想将这些数值四舍五入到小数点后两位,这是我要使用的:

df = df.replace(np.nan, '', regex=True)

之后df变为:

City          a       b       c
Detroit       129.0  0.54   2,118.0
East          188.0  0.79   4,624.47
Houston       154.0  0.65   3,492.14
Los Angeles   266.0  1.0    7,426.0
Miami         26.0   0.11   792.18
MidWest       56.0   0.24   772.78

大多数情况下都可以正常工作,但是也可以将适当的整数转换为小数,即将100之类的值四舍五入为100.0。我想要这样的数据框:

City          a       b         c
Detroit       129    0.54      2,118
East          188    0.79      4,624.47
Houston       154    0.65      3,492.14
Los Angeles   266    1         7,426
Miami         26     0.11      792.18
MidWest       56     0.24      772.28

我想保留这些值作为适当的整数本身,同时在所有数字列中将其他值四舍五入到小数点后两位。我该怎么办?

1 个答案:

答案 0 :(得分:2)

使用g format

  

常规格式。对于给定的精度p> = 1,这会将数字四舍五入为p个有效数字,然后根据结果的大小以定点格式或科学计数法格式化结果。

     

精确规则如下:假设以表示类型'e'和精度p-1格式化的结果将具有指数exp。然后,如果-4 <= exp      

正负无穷大,正负零和nans的格式分别为inf,-inf,0,-0和nan,无论精度如何。

     

精度0等同于精度1。默认精度为6。

df.update(df.select_dtypes(include=np.number).applymap('{:,g}'.format))
print (df)
          City    a     b         c
0      Detroit  129  0.54     2,118
1         East  188  0.79  4,624.47
2      Houston  154  0.65  3,492.14
3  Los Angeles  266     1     7,426
4        Miami   26  0.11    792.18
5      MidWest   56  0.24   772.781