【问题标题】:Pandas convert float to int if decimals are 0如果小数为 0,熊猫将浮点数转换为整数
【发布时间】:2019-09-30 11:23:16
【问题描述】:

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

我想将这些数值四舍五入到小数点后 2 位,为此我正在使用:

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

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

【问题讨论】:

  • 可以添加一些示例数据吗?
  • @jezrael 添加了示例数据
  • 那么原始数据是带有, 的字符串吗?还是原来是花车?
  • @jezrael 最初的数据是浮动的,但我使用 df.update(df.select_dtypes(include=np.number).applymap('{:,}'.format)) 添加了逗号

标签: python-3.x pandas dataframe


【解决方案1】:

使用g format:

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

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

正负无穷、正负零和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

【讨论】:

  • 在更新作为对象的所有列的类型后,将列类型指定为 float64。我想更新那些在小数点后只有 0 的列作为整数。你能帮帮我吗?我整天都在尝试这样做,但找不到任何东西
  • @VikasChauhan - 可以创建新问题吗?
猜你喜欢
  • 2019-12-07
  • 2019-05-14
  • 1970-01-01
  • 2020-02-07
  • 2018-02-13
  • 1970-01-01
  • 1970-01-01
  • 2021-08-17
相关资源
最近更新 更多