使用pandas将指定列非数值替换为float类型0.0的实现咨询
问题解决方案
原有代码的问题如下:
applymap会作用于整个DataFrame的所有单元格,导致所有列被修改,不符合仅操作最后一列的需求- 布尔索引的筛选逻辑会将不符合条件的单元格赋值为NaN,没有实现非数值替换为0.0的要求
最优实现方案
pandas内置的pd.to_numeric函数原生支持该需求,无需自定义判断函数,执行效率更高:
import pandas as pd df = pd.read_csv(filename) # 仅处理最后一列:转换数值+非数值替换为0.0 df.iloc[:, -1] = pd.to_numeric(df.iloc[:, -1], errors='coerce').fillna(0.0)
参数说明:
errors='coerce':将无法转换为数值的内容统一转为NaNfillna(0.0):将所有NaN值替换为float类型的0.0,完全匹配需求要求
自定义函数的修正写法
如果你需要保留原有自定义判断逻辑,只需修改为仅对最后一列应用函数即可:
import pandas as pd def convert_to_float(x): try: return float(x) except: return 0.0 df = pd.read_csv(filename) df.iloc[:, -1] = df.iloc[:, -1].apply(convert_to_float)
内容的提问来源于stack exchange,提问作者Mughees Asif
相关产品推荐
相关产品推荐

