如何在包含浮点数和 Nan 或 None 值的同一列中舍入浮点值?

Posted

技术标签:

【中文标题】如何在包含浮点数和 Nan 或 None 值的同一列中舍入浮点值?【英文标题】:How to round Float values in a same column that contains also Float number and Nan or None value? 【发布时间】: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

【问题讨论】:

【参考方案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]

【讨论】:

以上是关于如何在包含浮点数和 Nan 或 None 值的同一列中舍入浮点值?的主要内容,如果未能解决你的问题,请参考以下文章

Python如何将浮点数作为十六进制转换为十进制

转换为双精度浮点数或浮点数是不是保留无穷大和 NaN?

IEEE754 浮点数系统中的 NaN 和 +-INF

生成 n 个不是 ∞ 或 NaN 的不同浮点数(在 Go 中)

函数无法解释 nan 值

如何在 c 中产生 NaN 浮点数?