使用Python的TypeError:str和int

时间:2018-09-25 07:45:45

标签: python statistics linear-regression scatter-plot

尝试编译代码时收到此错误。我从xlsx文件中提取数据并创建了一个数据框,将空值替换为0,将所有值都转换为可以散布的字符串,并且当我尝试显示线性回归的结果时,我收到了此错误。

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

这是我到目前为止所做的代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
def predict(x):
return slope * x + intercept
from scipy import stats
xlsxfile = pd.ExcelFile("C:\\Users\\AchourAh\\Desktop\\PL14_IPC_03_09_2018_SP_Level.xlsx") 
data = xlsxfile.parse('Sheet1', index_col = None, header = None) 
data1 = data.fillna(0) #Replace null values of the whole dataset with 0
data1 = data1.astype(str)
print(data1)
X = data1.iloc[0:len(data1),1] 
print(X)
Y = data1.iloc[0:len(data1),2] 
print(Y)
axes = plt.axes()
axes.grid() 
plt.scatter(X,Y)     
slope, intercept, r_value, p_value, std_err = stats.linregress(X, Y)

请注意,我是初学者。最后一行导致错误 这是数据框的第一列COP COR和PAUS,我正尝试将线性回归应用于以下内容:

 0            PP   SP000045856 COP COR  SP000045856 PAUS   
 1          201723                    0              2000   
 2          201724                12560             40060   
 3          201725               -17760             15040   
 4          201726                -5840             16960   
 5          201727                10600             4480   
 6          201728                    0             14700   
 7          201729                 4760             46820  

...直到第27行

1 个答案:

答案 0 :(得分:1)

Excel文件中的数据在第一行中具有标题信息,因此设置header=None是数据中包含字符串值而不是将其用作列名的原因。 如果您删除标题kwarg

xlsxfile = pd.ExcelFile("C:\\Users\\AchourAh\\Desktop\\PL14_IPC_03_09_2018_SP_Level.xlsx") 
data = xlsxfile.parse('Sheet1', index_col = None)

一切正常,您应该获得一个像这样的数据框:

data

   0      PP  SP000045856 COP COR  SP000045856 PAUS
0  1  201723                    0              2000
1  2  201724                12560             40060
2  3  201725               -17760             15040
3  4  201726                -5840             16960
4  5  201727                10600              4480
5  6  201728                    0             14700
6  7  201729                 4760             46820

但是,通过直接使用pandas的read_excel功能,您可以做的事情甚至更短:

data = pd.read_excel('C:\\Users\\AchourAh\\Desktop\\PL14_IPC_03_09_2018_SP_Level.xlsx', 'Sheet1')

然后可以完成您的散点图。喜欢

data.plot('SP000045856 COP COR', 'SP000045856 PAUS', 'scatter')

或者更好的可读性但相同:

data.plot.scatter('SP000045856 COP COR', 'SP000045856 PAUS')

线性回归可以像

slope, intercept, r_value, p_value, std_err = stats.linregress(data['SP000045856 COP COR'], data['SP000045856 PAUS'])