【问题标题】:Python Error: 'Series' object has no attribute 'flatten'Python 错误:“系列”对象没有“扁平化”属性
【发布时间】:2019-09-27 12:04:51
【问题描述】:

我对 Python 非常陌生,我正在尝试了解一个相当简单的线性回归模型。

当我尝试运行这行代码时,我收到错误“系列”对象没有属性“扁平化”

df4= pd.DataFrame({'Actual': y_test.flatten(), 'Predicted': y_pred.flatten()})

由于我的值是回归的输出,我相当肯定它是一个数组,并且在我的代码中没有任何地方创建一个系列。有没有办法把它变成一个数组,这样我就可以使用 flatten 函数了?

我尝试使用 .values 引发此错误:“numpy.ndarray”对象没有属性“values”

df4= pd.DataFrame({'Actual': y_test.values.flatten(), 'Predicted': y_pred.values.flatten()})

Y_test 定义

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) 

X & Y 定义 X = df2[["MonthYear"]] y = df2["HC"]

数据都是数字,看起来像: HC 月年 567 1 597 2 652 3

【问题讨论】:

  • 你能把定义y_test的代码sn-ps贴出来
  • 也许您没有将y_test 转换为数组。只对ypred使用flatten,大概是regressor的输出
  • @mathewgunther X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
  • 在较新版本的sklearn 中,train_test_split 返回与输入相同类型的对象。
  • 你能对 X 和 y 做同样的事情吗?

标签: python arrays linear-regression series


【解决方案1】:

问题是您已将这些系列 y_test 和 y_pred 转换为 numpy 数组以使用 flatten 函数,我遇到了同样的问题,但使用以下修复程序修复了它:

1) 使用 y_test.shape。找出您的数据框系列的形状,即在您的情况下 y_test 和 y_pred。

2) 使用按形状找出的行数和列数将这个数据框列或序列重塑为 Numpy 数组。因为 flatten 是 Numpy 数组的一个函数。

3) 然后使用你的 flatten 函数,它会起作用的。

代码如下。 1. 第一步:test.shape 2. 第二步(重塑):test = test.values.reshape(1,4069) 3. df = pd.DataFrame({'Actual': test.flatten(), 'Predicted' : pred.flatten()})

【讨论】:

    【解决方案2】:
    import numpy as np
    y_test = np.array(list(y_test))
    y_pred = np.array(y_pred)
    df4= pd.DataFrame({'Actual': y_test.flatten(), 'Predicted': y_pred.flatten()})
    

    这应该可以解决您的问题。

    【讨论】:

      猜你喜欢
      • 2020-10-02
      • 2022-01-14
      • 1970-01-01
      • 2014-05-14
      • 1970-01-01
      • 2017-02-27
      • 2021-12-04
      • 2014-07-08
      • 1970-01-01
      相关资源
      最近更新 更多