【发布时间】:2023-03-25 20:45:01
【问题描述】:
我在尝试编译代码时收到此错误。我从 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 行
【问题讨论】:
-
您好,欢迎来到 SO。为什么
converted all the values to string to be able to scatterplot??为什么您认为需要字符串才能创建散点图?但是 -stats.linregress需要数字数组,因为它计算例如的线性回归一些测量的,即例如噪声数据,在一些独立变量上,例如时间或其他什么...也许您可以简要查看此功能的文档:docs.scipy.org/doc/scipy/reference/generated/… -
为了完整起见 - 我的建议是:不要将您的数据转换为您想要实现的字符串。事实上,使用两个字符串数组作为参数散布有效并且不会抛出错误并不一定意味着结果对您有用或有意义。
-
如果我删除 astype 行,我会收到:TypeError: 0 is not a string in the scatter plot line 这就是我转换为字符串的原因你知道如何在不收到此错误的情况下散点图
-
请将您的数据框作为样本发布,以便我们查看您正在处理的数据。 (请不要截图,像代码一样发布,如果太大,可能只是
data.head()) -
我可以通过向
plt.scatter提供一个包含字符串 和 整数的列表来重现您的错误。是否有可能,您的数据的第一行中可能有标题名称...?
标签: python statistics linear-regression scatter-plot