如何在包含浮点数和 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 中,我有一列包含 float
、str
、None
和 nan
值。
我想只舍入 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 值的同一列中舍入浮点值?的主要内容,如果未能解决你的问题,请参考以下文章