Python 的类型错误:str 和 int

TypeError with Python : str and int

我在尝试编译我的代码时收到此错误。我从 xlsx 文件中提取数据并创建了一个数据框,用 0 替换了空值,将所有值转换为 sting 以便能够绘制散点图,当我试图显示线性回归的结果时,我收到了这个错误。

 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 行

您的 Excel 文件中的数据在第一行有 header 信息,因此设置 header=None 是您的数据中有字符串值而不是将其作为列名。
如果删除 header 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')

您的 scatter-plot 然后可以完成,例如喜欢

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'])