gpt4 book ai didi

python - 如何修复 numpy TypeError : unsupported operand type(s) for -: 'str' and 'str'

转载 作者:行者123 更新时间:2023-12-05 03:59:43 25 4
gpt4 key购买 nike

我一直在尝试在 spyder IDE 上用 python 实现多项式回归模型,一切正常,最后当我尝试从 numpy 添加 arrange 函数时,它给了我以下错误!!

import pandas as pd 
import matplotlib.pyplot as plt
import numpy as np

dataset = pd.read_csv("Position_Salaries.csv")
X = dataset.iloc[:, 1:2]
y = dataset.iloc[:, 2]

#fitting the linear regression model
from sklearn.linear_model import LinearRegression
lin_reg = LinearRegression()
lin_reg.fit(X,y)

#fitting the polynomial linear Regression
from sklearn.preprocessing import PolynomialFeatures
poly_reg = PolynomialFeatures(degree = 4)
X_poly = poly_reg.fit_transform(X)
lin_reg2 = LinearRegression()
lin_reg2.fit(X_poly,y)

#visualising the linear regression results
plt.scatter(X,y ,color = 'red')
plt.plot(X,lin_reg.predict(X), color='blue')
plt.title('linear regression model')
plt.xlabel('positive level')
plt.ylabel('salary')
plt.show()

#the code doesnt work here on this np.arrange linee !!!
#visualisng the polynomial results
X_grid = np.arange(min(X),max(X), 0.1)
X_grid = X_grid.reshape((len(X_grid), 1))
plt.scatter(X,y ,color = 'red')
plt.plot(X_grid,lin_reg2.predict( poly_reg.fit_transform(X_grid)), color='blue')
plt.title('linear regression model')
plt.xlabel('positive level')
plt.ylabel('salary')
plt.show()

它应该运行和执行没有任何错误!

错误回溯:-

TypeError                                 Traceback (most recent call last)

<ipython-input-24-428026f3698c> in <module>()
----> 1 x_grid = np.arange(min(x),max(x),0.1)
2 print(x_grid, x)
3 x_grid = x_grid.reshape((len(x_grid),1))
4
5 plt.scatter(x, y, color = 'red')

TypeError: unsupported operand type(s) for -: 'str' and 'str'

最佳答案

如果这个错误发生在:

np.arange(min(X),max(X), 0.1)

一定是因为min(X)max(X)都是字符串

In [385]: np.arange('123','125')                                                                                
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-385-0a55b396a7c3> in <module>
----> 1 np.arange('123','125')

TypeError: unsupported operand type(s) for -: 'str' and 'str'

因为 X 是一个 pandas 对象(dataframe 或 series?)这并不奇怪。 pandas 在不能使用数字(并且不使用 numpy string dtype)时自由使用 object dtype:

X = dataset.iloc[:, 1:2]

np.arange(np.array('123'),np.array('125')) 产生不同的错误,关于 'U3' dtypes。

LinearRegresion 调用与此 X 一起工作的事实有点令人费解,但我不知道它如何清理其输入。

在任何情况下,我都会在 arange 调用之前检查 min(X),查看它的值和类型。如果它是一个字符串,则更详细地探索 X


在评论中您说:有两列,所有列都有从 1-10 和 45k 到 100k 的整数。“45k”是整数还是字符串?


让我们对虚拟数据框进行测试:

In [392]: df = pd.DataFrame([[1,45000],[2,46000],[3,47000]], columns=('A','B'))                                 
In [393]: df
Out[393]:
A B
0 1 45000
1 2 46000
2 3 47000
In [394]: min(df)
Out[394]: 'A'
In [395]: max(df)
Out[395]: 'B'

minmax 生成字符串 - 从列名派生。

相比之下,fit 函数可能使用数据框的数组值:

In [397]: df.to_numpy()                                                                                         
Out[397]:
array([[ 1, 45000],
[ 2, 46000],
[ 3, 47000]])

不要假设事情应该有效!测试、调试、打印可疑值。


min/max 是 python 函数。 numpy 的以数据帧敏感的方式运行 -

In [399]: np.min(df)      # delegates to df.min()                                                                                      
Out[399]:
A 1
B 45000
dtype: int64
In [400]: np.max(df)
Out[400]:
A 3
B 47000
dtype: int64

尽管这些也不是 arange 的适当输入。

您打算通过此 arange 调用产生什么?

arange 在数据框的一列范围内工作:

In [405]: np.arange(np.min(df['A']), np.max(df['A']),.1)                                                        
Out[405]:
array([1. , 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2. , 2.1, 2.2,
2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9])

关于python - 如何修复 numpy TypeError : unsupported operand type(s) for -: 'str' and 'str' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56907641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com