Pandas DataFrame报Invalid Key错误,使用loc计算列差值报错如何解决?
报错原因
- 核心是
loc赋值语法使用错误。pandas中通过loc给指定位置赋值的标准语法是df.loc[行筛选规则, 目标列名] = 待写入的值,你写的代码试图修改loc返回结果的index属性,完全不符合赋值逻辑,因此会触发key类型错误。 - 存在隐性逻辑问题:你判断值不等于
'0'(字符串0),如果两列是数值类型,该判断条件会直接失效,把实际为数值0的行也纳入计算范围。
修复方案
如果你的两列本身就是数值类型,直接修改赋值逻辑即可,代码如下:
df.loc[(df['Original Price'] != 0) & (df['Old Original Price'] != 0), 'Price Difference'] = df['Original Price'] - df['Old Original Price']
如果两列存储的是字符串格式的价格,建议先转成数值类型再计算,避免字符串运算报错:
import pandas as pd # 转换两列为数值类型,非法值自动转为NaN df['Original Price'] = pd.to_numeric(df['Original Price'], errors='coerce') df['Old Original Price'] = pd.to_numeric(df['Old Original Price'], errors='coerce') # 赋值计算差值 df.loc[(df['Original Price'] != 0) & (df['Old Original Price'] != 0), 'Price Difference'] = df['Original Price'] - df['Old Original Price']
内容的提问来源于stack exchange,提问作者NZH
相关产品推荐
相关产品推荐

