【问题标题】:How to round Float values in a same column that contains also Float number and Nan or None value?如何在包含浮点数和 Nan 或 None 值的同一列中舍入浮点值?
【发布时间】:2019-08-19 19:58:08
【问题描述】:

在 DF 中,我有一列包含 floatstrNonenan 值。

我想只舍入 float 值而不影响其他值。我尝试使用掩码仅访问 float 值,但没有成功。

如果解决方案可以使用本机 pandas 函数而不是迭代,我会更喜欢它。

我的数据样本:

 index      Column A         Column B   
 1          57:24.1          98.67799997
 2          57:24.1          58.67799997
 3          57:53.8          95.66000009
 4          358:23.4         210.68099999
 5          None             35.10
 6          25.06778         None
 7          99999.565656     Abc
 8          abc              None

【问题讨论】:

    标签: python python-3.x pandas jupyter-notebook


    【解决方案1】:

    这个怎么样 - 它会检查这个值是否是一个浮点数,如果是,它会舍入到 1,否则什么都不做:

    df["Column B"].apply(lambda x: round(x,1) if isinstance(x,float) else x)
    

    或者,如果您想将此函数应用于数据框中的每个单元格:

    df.applymap(lambda x: round(x,1) if isinstance(x,float) else x)
    

    另请参阅:Apply function to each cell in DataFrame

    【讨论】:

    • 不幸的是,您建议我的第一个解决方案将 B 列返回给我,但没有四舍五入,而第二个解决方案返回给我完整的 DF,没有任何变化(未四舍五入)
    • 尝试将float 替换为np.float64。它基本上需要是您在数据框中拥有的确切类型的浮点数。
    • 你给出的第一个解决方案没有改变输出
    • 第二个返回我:AttributeError: 'Series' object has no attribute 'applymap'
    • 我可以检查“df”是一个多于 1 列的数据框吗?
    【解决方案2】:

    试试这个怎么样。可能有点贵,但值得一试

    df['Column B'] = [round(val,2) for val in df['column B'] if type(val)==float]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-09
      • 2017-05-20
      相关资源
      最近更新 更多