如何修复numpy TypeError:-:'str'和'str'

时间:2019-07-05 18:13:00

标签: python numpy machine-learning

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

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()

它应该可以正常运行和执行!

8 个答案:

答案 0 :(得分:1)

尝试此代码。这对我很有效,因为我也在做Udemy讲座。

using

答案 1 :(得分:0)

您需要确保输入的内容均具有正确的类型。在我看来,op的类型都是str。也许尝试通过float(x)或一些类似函数将它们转换为浮点数?

答案 2 :(得分:0)

您应该检查X和y中的内容。它们可能是包含字符串的系列对象。您想要的是提取X和y中的值,然后再对它们进行任何处理,将它们转换为float / ints。

类似的东西:

X = dataset.iloc[:, 1:2].astype(float)
y = dataset.iloc[:, 2].astype(float)

答案 3 :(得分:0)

如果此错误发生在:

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'

由于Xpandas对象(数据框或序列?),所以这并不奇怪。 pandas在不能使用数字(并且不使用numpy字符串dtype)时可以自由使用dtype对象:

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

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

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

无论如何,我会在min(X)调用之前检查arange,查看其值和类型。如果是字符串,则更详细地探索X


在注释中,您说:there are two columns and all have integers from 1-10 and 45k to 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])

答案 4 :(得分:0)

使用此:

lib.c

因为您只需要接受x = dataset.iloc[:, 1:2].values y = dataset.iloc[:, -1:].values x中的数值。

使用y意味着它将dataset.iloc[].valuesLevel数据集中包含Salaryx名称。

答案 5 :(得分:0)

替换

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

使用

X = dataset.iloc[:, 1:2].values and y = dataset.iloc[:, 2].values

答案 6 :(得分:0)

检查您是否从数据集中获取值。记住是:

x = dataset.iloc[:, 1:-1].values
y = dataset.iloc[:, -1].values

不是:

x = dataset.iloc[:, 1:-1]
y = dataset.iloc[:, -1]

如果没有 ".values",您会得到错误消息显示的字符串 ("str")

答案 7 :(得分:0)

试试下面的代码:

X_grid = np.arange(float(min(X ['Level'])), float(max(X['Level'])), 0.01, dtype= float)