使用polyfit函数时遇ValueError: numpy.object_类型非inexact错误原因咨询
解决
ValueError: data type <class 'numpy.object_'> not inexact错误 嘿,这个错误我之前帮好几个开发者排查过,本质是数据类型不匹配导致的,让我给你拆解清楚:
错误核心原因
numpy.polyfit() 这个函数要求输入的 x 和 y 必须是数值型数据(浮点/整数),也就是numpy定义的"inexact"类型(支持精确数值计算的类型)。但你的代码里,x或y的 dtype 是 <class 'numpy.object_'>——这是numpy用来存储任意Python对象的类型,说明你的DataFrame列里要么混了非数值内容,要么列的类型没正确设置为数值型,导致polyfit无法进行数值计算,直接抛出错误。
常见触发场景
你遇到这个问题,大概率是下面两种情况之一:
US GDP或US Unemployment列里混了非数字内容,比如字符串格式的占位符(像"NA"、"--"、"暂无数据"这类),读取数据时被pandas识别成了object类型- 读取数据时没有指定正确的 dtype,pandas默认把这些列设为
object类型,即使里面大部分是数字
快速验证方法
你可以先跑两行代码确认问题:
# 查看列的数据类型 print(data5.dtypes) # 查看列里是否有非数值元素 print(data5['US GDP'].apply(type).unique()) print(data5['US Unemployment'].apply(type).unique())
如果输出里有<class 'str'>或者除了int/float之外的类型,那就坐实了数据类型的问题。
修复方案
先把列转换成数值型,同时把非数值内容转为NaN,再清理掉含NaN的行(或者根据需求填充),代码如下:
import pandas as pd import numpy as np import matplotlib.pyplot as plt # 将列转为数值型,非数值内容转为NaN data5['US GDP'] = pd.to_numeric(data5['US GDP'], errors='coerce') data5['US Unemployment'] = pd.to_numeric(data5['US Unemployment'], errors='coerce') # 删除包含NaN的行(如果需要保留数据,也可以用fillna填充,比如data5.fillna(method='ffill')) data5 = data5.dropna(subset=['US GDP', 'US Unemployment']) # 重新运行绘图代码 x = data5['US GDP'] y = data5['US Unemployment'] plt.scatter(x, y) z = np.polyfit(x, y, 1) p = np.poly1d(z) plt.plot(x,p(x),"r--") plt.show()
内容的提问来源于stack exchange,提问作者Yunus Emre Kocabey
相关产品推荐
相关产品推荐

