【问题标题】:Scipy linregress returns tuple when passed Pandas data传递 Pandas 数据时,Scipy linregress 返回元组
【发布时间】:2019-09-02 03:52:13
【问题描述】:

使用 Pandas,我从 CSV 文件中读取数据,然后尝试使用 linregress 对其执行线性回归。我能够从文件中提取和操作数据,但是,当我使用 linregress 时,虽然它似乎在运行回归,但它返回一个元组,并且似乎没有斜率、截距和其他属性。

我得到的错误如下:

Traceback (most recent call last):
  File "Plot test.py", line 24, in <module>
    UP_S_m = UP_S_stats.slope
AttributeError: 'tuple' object has no attribute 'slope'

使用以下代码:

import csv
import pandas as pd
import matplotlib.pyplot as plt
from scipy.stats import linregress

headers = ['UnitPrice', 'FinalPrice', 'ProductName', 'gSugar', 'gProtein', 'gFat', 'Calories', 'ContainerNum', 'Ounces']

data = pd.read_csv("Yogurt Sugar - All Data CSV.csv", names = headers, skiprows = 1)

UnitPrice = data.UnitPrice
FinalPrice = data.FinalPrice
Sugar = data.gSugar
Protein = data.gProtein
Fat = data.gFat
Calories = data.Calories
Ounces = data.Ounces

#
# Run regressions.
#

UP_S_stats = linregress(UnitPrice, Sugar)

UP_S_m = UP_S_stats.slope

我查看了几个示例,包括 this very similar one,但无法确定我哪里出错了。

【问题讨论】:

标签: python pandas scipy


【解决方案1】:

从 SciPy 版本 0.16.0 开始,linregress 返回一个 namedtuple,它允许您使用属性名称访问元组的元素。如果您使用的 SciPy 版本早于 0.16,则返回值是一个普通元组,因此您必须使用常规索引获取斜率,例如

UP_S_m = UP_S_stats[0]

或直接从函数调用中解压名称,例如

slope, intercept, rvalue, pvalue, stderr = linregress(UnitPrice, Sugar)

【讨论】:

    猜你喜欢
    • 2021-11-12
    • 1970-01-01
    • 2021-04-23
    • 2019-03-06
    • 2018-04-25
    • 1970-01-01
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多