如何将DataFrame中float64列的整数值替换为空值?
解决DataFrame中float64列整数值替换为空值的问题
你之前方法的问题说明
- 第一种方法用
' '空格字符串替换,会导致列类型从float64变为object,破坏数值列的特性,且未处理NaN值的情况。 - 第二种方法存在变量名错误(循环变量是
cols,但代码里用了col),且直接给整个df赋值会意外修改其他列,逻辑范围不正确。 - 第三种思路错误地将
float类型列当作字符串处理,contains是字符串方法,不能直接用于数值列。
可行解决方案
因为你的列是float64类型,数值列的空值应该用np.nan表示(而非空格字符串),以下是两种可靠方法:
方法一:使用mask结合is_integer
import numpy as np import pandas as pd # 遍历每一列处理 for col in df.columns: # 先排除NaN值,再判断是否为整数,满足条件则替换为np.nan df[col] = df[col].mask(df[col].notna() & df[col].apply(lambda x: x.is_integer()), np.nan)
方法二:使用取模运算判断整数
import numpy as np import pandas as pd for col in df.columns: # 排除NaN后,判断数值取模1是否等于0(整数的特征) df[col] = df[col].mask(df[col].notna() & (df[col] % 1 == 0), np.nan)
更简洁的批量处理方式(无需循环)
如果所有列都是float64类型,可以直接对整个DataFrame操作:
import numpy as np import pandas as pd df = df.mask(df.notna() & df.applymap(lambda x: x.is_integer()), np.nan)
内容的提问来源于stack exchange,提问作者Panvas
相关产品推荐
相关产品推荐

