Python3使用pandas.DataFrame.sub()时报错str与float不支持减法运算
问题原因
你遇到的TypeError: unsupported operand type(s) for -: 'str' and 'float'报错核心和缺失值无关,是df1的部分列中混入了字符串类型的值,pandas无法对字符串和浮点数执行减法运算才触发报错。
你裁剪为5行样本能正常运行,是因为你选取的样本行刚好所有列都是数值类型,没有覆盖到全量数据中存在字符串的异常行。
排查步骤
- 执行
print(df1.dtypes)查看df1各列的数据类型,只要有列的dtype为object,就说明该列混有非数值类型的值。 - 对所有object类型的列执行以下代码,即可定位到包含字符串的行:
# 替换为你要排查的列名 df1[target_col].apply(lambda x: type(x)).value_counts()
解决方案
你可以直接批量将df1的所有列转换为数值类型,无法转换的异常值自动转为NaN,后续再执行sub运算就会正常返回NaN不会中断:
# 方案1:读取csv时直接指定转换 df1 = pd.read_csv('df1.csv', dtype=float, errors='coerce') # 方案2:读取后批量转换所有列 df1 = df1.apply(pd.to_numeric, errors='coerce')
内容的提问来源于stack exchange,提问作者Evan Lee
相关产品推荐
相关产品推荐

