pandas中int64类型列的'NK'含义及转换报错问题咨询
解决pandas中含'NK'的列转换数值问题&解释'NK'含义
嘿,我来帮你搞定这两个问题!
一、先解决转换float时的错误问题
你遇到的ValueError: could not convert string to float: ' NK',核心原因是数据里不仅有纯'NK',还有带前后空格的' NK',原来的判断逻辑只处理了前者,没覆盖带空格的情况。而且逐行apply的效率偏低,推荐用pandas的矢量化操作来解决,更简洁高效:
推荐方法(用pd.to_numeric)
这个方法会自动处理无法转换的字符串,还能统一去除空格,是最省心的方案:
# 1. 先去除每个元素的前后空格 # 2. 转换为数值,无法转换的(比如'NK')设为NaN # 3. 把NaN填充为0,最后转成float类型 df['pathsize'] = pd.to_numeric(df['pathsize'].str.strip(), errors='coerce').fillna(0).astype(float)
如果你想改进原来的apply函数
只需要增加去除空格的步骤,就能覆盖所有'NK'相关的情况:
def pathsize(row): # 先把值转成字符串并去除前后空格,避免空格干扰判断 val = str(row["pathsize"]).strip() if val != 'NK': return float(val) return 0.0 df['pathsize'] = df.apply(pathsize, axis=1)
另外要纠正一个小误解:你说列的dtype是int64,但实际上pandas的原生int64(小写i)是绝对不能存储字符串的——numpy的int64数组只能存整数,连NaN都存不了。所以你的列实际dtype应该是object(因为混合了字符串和数值),可能是数据加载时自动识别成了object,只是显示时有混淆。可以用print(df['pathsize'].dtype)确认一下。
二、解释'NK'的含义
在数据场景里,'NK'几乎都是**"Not Known"(未知)或者"Not Available"(不可用)**的缩写,是数据提供者用来标记缺失值的自定义符号。他们没有用pandas默认的缺失值标记(比如NaN),而是用了这个字符串,导致加载后列变成了混合类型的object列,而不是纯数值列。
内容的提问来源于stack exchange,提问作者Saber Alex
相关产品推荐
相关产品推荐

