【问题标题】:Convert all elements in float Series to integer将浮点系列中的所有元素转换为整数
【发布时间】:2017-10-05 22:05:49
【问题描述】:

我在数据框中有一列具有浮点值(因此我将此列称为浮点系列)。我想将所有值转换为整数或将其四舍五入以便没有小数。

假设数据框是 df,列是 a,我试过这个:

df['a'] = round(df['a']) 

我收到一条错误消息,说此方法不能应用于系列,仅适用于单个值。

接下来我尝试了这个:

for obj in df['a']: 
   obj =int(round(obj))

在此之后我打印了 df 但没有任何变化。 我哪里错了?

【问题讨论】:

    标签: python pandas casting series


    【解决方案1】:

    round 将不起作用,因为它在类似于数组而不是标量值的 pandas Series 上被调用,有内置方法 pd.Series.round 可以对整个 Series 数组进行操作,之后您可以更改dtype 使用astype:

    In [43]:
    df = pd.DataFrame({'a':np.random.randn(5)})
    df['a'] = df['a'] * 100
    df
    
    Out[43]:
                a
    0   -4.489462
    1 -133.556951
    2 -136.397189
    3 -106.993288
    4  -89.820355
    
    In [45]:
    df['a'] = df['a'].round(0).astype(int)
    df
    
    Out[45]:
         a
    0   -4
    1 -134
    2 -136
    3 -107
    4  -90
    

    当有可用的矢量化方法时,也没有必要遍历行

    还有这个:

    for obj in df['a']: 
       obj =int(round(obj))
    

    不改变系列中的单个单元格,它在值的副本上运行,这就是 df 不改变的原因。

    【讨论】:

    • 这行得通。谢谢。所以,这里的 round 既是一个内置函数,也是一个 Series 数组的属性(我们在这里使用)
    • 技术上不,它是 Series 的方法而不是属性,但它可以根据用途作为函数传递,最好不要对此感到困惑
    【解决方案2】:

    循环中的代码:

    obj = int(round(obj))

    仅更改名称 obj 所指的对象。它不会修改存储在系列中的数据。如果您想这样做,您需要知道数据存储在系列中的哪个位置并在那里进行更新。

    例如

    for i, num in enumerate(df['a']):
        df['a'].iloc[i] = int(round(obj))
    

    【讨论】:

    • 我试过了,但没有帮助。我看起来我们只是在这里修改副本而不是实际值
    • 这称为chain-indexing,有时不起作用,你必须这样做df['a'].iloc[i] = int(round(obj))
    【解决方案3】:

    将浮点数转换为整数时,我使用 df.dtypes 发现我试图四舍五入的列是一个对象而不是浮点数。 round 命令不适用于对象,所以我做的转换:

    df['a'] = pd.to_numeric(df['a'])
    df['a'] = df['a'].round(0).astype(int)

    或一行:

    df['a'] = pd.to_numeric(df['a']).round(0).astype(int)
    

    【讨论】:

      【解决方案4】:

      如果您特别想按照您的问题进行四舍五入 向上,您可以使用np.ceil

      import numpy as np
      df['a'] = np.ceil(df['a']) 
      

      另见Floor or ceiling of a pandas series in python?

      不确定将类型转换为 int 有多大优势; pandas 和 numpy love 漂浮。

      【讨论】:

        猜你喜欢
        • 2013-10-02
        • 2019-12-04
        • 2021-11-25
        • 1970-01-01
        • 2017-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多