解决 TypeError: unsupported operand type(s) for -: ‘NoneType‘ and ‘float‘ 错误
当我们看到出现这个错误,说明这个错误,我们写的程序打算对数值做数学运算,例如加减法,但是数据里面包含 None
或 NaN
值,所以计算会报错。
所以,我们要检查数据中某些值是 None
或 NaN
(空值)
方法1:检查并处理空值
# 检查DataFrame中的空值
print(df.isnull().sum())# 处理空值 - 填充默认值
df['column_name'] = df['column_name'].fillna(0) # 用0填充
# 或者
df['column_name'] = df['column_name'].fillna(df['column_name'].mean()) # 用平均值填充# 或者直接删除包含空值的行
df = df.dropna(subset=['column_name'])
- 检查DataFrame中的空值
看看哪些列和行有空值,省得
print(df.isnull().sum())
- 把空值替换成默认值或者其他值
df['column_name'] = df['column_name'].fillna(0) # 用0填充
上面是用0来填充,如果有其他值可以替换那里。
- 冲动派写法:直接删除包含空值的行
df = df.dropna(subset=['column_name'])
方法2:在运算前添加空值检查
# 方法1:使用条件判断
result = x - y if x is not None and y is not None else None# 方法2:使用Pandas的矢量操作(更高效)
df['result'] = df['column1'] - df['column2'] # Pandas会自动处理NaN
方法3:使用 NumPy 的安全运算
import numpy as np# 使用np.subtract并指定out参数处理None
result = np.subtract(array1, array2, out=np.zeros_like(array1), where=(array1!=None)&(array2!=None))