【问题标题】:TypeError with Python : str and intPython 的类型错误:str 和 int
【发布时间】: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


【解决方案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-function 来做同样的事情,甚至更短:

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

【讨论】:

    猜你喜欢
    • 2022-08-18
    • 2013-10-12
    • 2019-05-09
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多