尝试编译代码时收到此错误。我从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行
最佳答案
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'])