【问题标题】:Limiting float value in for loop Python在for循环Python中限制浮点值
【发布时间】:2020-05-03 00:00:36
【问题描述】:

我正在从事银行项目,我的团队要求我将所有浮点值限制为 0.2 精度。

我的数据集.head()

目标:比较找出所有股票的最大值

我现在的输出:

银行代码
BAC       54.900002
C            564.099976
GS         247.919998
JPM       70.080002
女士        89.300003
WFC      58.520000
数据类型:float64

我的预期输出:

银行代码
BAC       54.90
C            564.10
GS         247.91
JPM       70.08
女士        89.30
WFC      58.52
数据类型:float64

请帮帮我!

【问题讨论】:

  • 通过限制你想把它们弄圆还是弄平? df.select_dtypes('float').round(2) 这里的答案主要使用打印格式,不会改变数据的实际值。

标签: python-3.x pandas numpy floating-point google-finance


【解决方案1】:

您在打印语句中错误地使用了“{:.2f}”,您应该使用.format() 来格式化您的浮点数。

您可以使用print("{:.2f}".format(some float)) 打印带有两位小数的浮点数as explained here

【讨论】:

  • 这适用于正常范围,但它正在遍历数据集,这会导致产生输出问题!
  • 我不明白为什么这不应该工作:```用于股票报价: print(tick, "{:.2f}".format(bank_stocks[tick]['Close' ].max()) ) ```
【解决方案2】:

你可以使用pandas.Series.roundmethod

我有一个玩具DataFramedf

l1        c1                           c2             
l2         a         b          c       a      b     c
0   0.066667  0.666667   6.666667  0.0002  0.002  0.02
1   0.133333  1.333333  13.333333  0.0004  0.004  0.04
2   0.200000  2.000000  20.000000  0.0006  0.006  0.06
3   0.266667  2.666667  26.666667  0.0008  0.008  0.08
df.xs('c', axis=1, level='l2').max().round(2)

结果成这样:

l1
c1    26.67
c2     0.08
dtype: float64

我猜你的情况

res = bank_stocks.xs('Close', axis=1, level='Stock Info').max().round(2)

将产生一个 Series res 由名称为 Bank Ticker 的代码索引,并且所需的值四舍五入到小数点后 2 位。

根据this answer,您可以使用它进行打印

with pd.option_context('display.max_rows', None, 'display.max_columns', None):
    print(res)

【讨论】:

  • 您的代码出现以下错误:'float' object has no attribute 'round'
  • 您能提供您的bank_stocks DataFrame 结构吗?例如,使用bank_stocks.head(5)。我的意思是,使用 for 循环很好,但 pandas 为您提供了更有效的方法
  • 很抱歉,我们不能在 cmets 上上传,对吧?我会在主要问题上显示
  • @Thirumalaivasan,我已经编辑了我的答案,请查看。这(或类似的东西)可能比 Python for 循环有更好的性能
  • @Thirumalaivasan,谢谢,我再次编辑了我的答案,喜欢你使用axis=1 而不是.T
【解决方案3】:

我不是一个非常高级的python程序员,但我应该可以:

{:.2f}.format(max())

至少可以说,这会将564.099976 打印为564.09

【讨论】:

    【解决方案4】:

    这对我有用,可靠且无循环

    bank_stocks.xs(key='Close',axis=1,level='Stock Info').max().round(2)
    

    O(n)^2 现在是 O(n)

    【讨论】:

      【解决方案5】:

      这不是一个干净的解决方案,但您可以将最高股票价格乘以 100,然后用 1 进行下限除法,然后除以 100。

      这会解决你的问题。

      【讨论】:

      • 我没听懂,但是这里的地板不工作
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-23
      • 1970-01-01
      • 2012-04-04
      • 1970-01-01
      • 2015-07-24
      • 2014-03-30
      • 2019-12-14
      相关资源
      最近更新 更多