Pandas DataFrame列与相邻行值相减生成新列报错问题咨询
报错原因
- 该错误为类型不匹配导致:报错信息中的
dtype('<U4')表示字符串类型,说明你参与计算的Stock或Sold Number列存在非数值的字符串值,无法直接和int64类型的数值执行减法运算。通常是导入数据时字段里混有空格、特殊符号等隐藏字符,导致列被识别为字符串类型。 - 额外说明:你使用的逐行循环写法在pandas中效率极低,处理大体积数据时性能会很差,建议用pandas自带的向量化运算方法实现。
正确实现步骤
第一步:修正字段数据类型
先清理数值列的异常字符,再转为整型:
# 清理字段内多余空格,统一转为int类型 Numbers['Stock'] = Numbers['Stock'].astype(str).str.strip().astype(int) Numbers['Sold Number'] = Numbers['Sold Number'].astype(str).str.strip().astype(int)
第二步:向量化计算新列
用shift(-1)方法直接获取下一行的Stock值,一行代码完成计算:
# shift(-1)作用是将列整体上移一行,当前行自动对应原下一行的Stock值 Numbers['PrepNumber'] = Numbers['Stock'].shift(-1) - (Numbers['Stock'] - Numbers['Sold Number'])
运算完成后最后一行的PrepNumber会自动为NaN空值,完全符合你的预期输出要求。
内容的提问来源于stack exchange,提问作者CarMan21
相关产品推荐
相关产品推荐

