【问题标题】:How to round calculations with pandas如何用熊猫四舍五入计算
【发布时间】:2020-10-27 20:10:37
【问题描述】:

我知道如何在 pandas (link) 中简单地对列进行四舍五入,但是,我的问题是如何在 pandas 中同时进行四舍五入和计算。

df['age_new'] = df['age'].apply(lambda x: round(x['age'] * 0.024319744084, 0.000000000001))

TypeError: 'float' object is not subscriptable

有什么办法吗?

【问题讨论】:

    标签: python pandas data-manipulation


    【解决方案1】:
    • .apply 未矢量化。
      • 在pandas.Series 上使用.apply 时,如'age',lambda 变量,x 是'age' 列,因此正确的语法是round(x * 0.0243, 4)
      • round 的ndigits 参数需要int,而不是float。
    • 使用矢量化方法更快,例如.mul,然后是.round。
      • 在这种情况下,有 1000 行,矢量化方法比使用 .apply 快 4 倍。
    import pandas as pd
    import numpy as np
    
    # test data
    np.random.seed(365)
    df = pd.DataFrame({'age': np.random.randint(110, size=(1000))})
    
    %%timeit
    df.age.mul(0.024319744084).round(5)
    [out]:
    212 µs ± 3.86 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
    
    %%timeit
    (df['age'] * 0.024319744084).round(5)
    [out]:
    211 µs ± 9.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
    
    %%timeit
    df.age.apply(lambda x: round(x * 0.024319744084, 5))
    [out]:
    845 µs ± 20.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
    

    【讨论】:

      【解决方案2】:

      有两个问题:

      • 括号内的x['age'] 不需要['age'],因为您已经应用于age 列(这就是您收到错误的原因)
      • round 将 int 作为第二个参数。

      试试

      df['age_new'] = df['age'].apply(lambda x: round(x * 0.024319744084, 5))
      

      (5 只是一个例子。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-08-16
        • 1970-01-01
        • 2014-10-29
        • 2018-09-08
        • 2022-01-09
        • 1970-01-01
        • 2023-01-14
        • 2023-01-12
        相关资源
        最近更新 更多