You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 13:57:45