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

标签 python numpy machine-learning google-colaboratory

我一直在尝试在 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/

相关文章:

python - 获取有条件的索引

python - 生成总和为 1 的随机变量数组(正数和负数)

python - 导入 Python 文件是否也会将导入的文件导入 shell?

machine-learning - gcloud ml-engine local train ...没有名为 XXX 的模块

python - 如何从类体内调用静态方法?

python - 使用 Python 的 Google 索引 API

Python C 扩展回调函数

Python:如何使用 1 个 lambda 函数进行多种浮点格式设置

python - 张量形状错误 : Must be rank 2 but is rank 3

python - 机器学习算法中的示例顺序 (Scikit Learn)