【问题标题】:ValueError: cannot copy sequence with size 13 to array axis with dimension 200ValueError:无法将大小为 13 的序列复制到维度为 200 的数组轴
【发布时间】:2023-03-06 18:35:01
【问题描述】:
DataReader = pd.read_csv('Quality.csv')
...
ip = [DataReader.x1, DataReader.x2, DataReader.x3, DataReader.x4,........., DataReader.x12, 
DataReader.x13]
op = DataReader.y
ip = np.matrix(ip).transpose()
op = np.matrix(op).transpose()

请帮助解决以下错误。 Python 3.7v 和 numpy 1.17v

Traceback (most recent call last):
File "Quality.py", line xx, in <module>
ip = np.matrix(ip).transpose()
File "\\defmatrix.py", line 147, in __new__
arr = N.array(data, dtype=dtype, copy=copy)
**ValueError: cannot copy sequence with size 13 to array axis with dimension 200**

【问题讨论】:

  • 告诉我们更多关于DataReader - 行、列、数据类型
  • DataReader.values 产生什么?数组有什么形状和dtype?
  • 行 200,总列数为 14(x=13 和 y=1),dtype - float64
  • 忽略前面提到的 dtype。 dtypes 是 int64 和 float 6
  • DataReader.values 产生具有 (200, 14) 形状的数组

标签: python-3.x pandas numpy csv


【解决方案1】:

您从一个包含 200 行和 14 列的数据框开始。然后它的.values 属性(或to_numpy() 方法结果)将是一个(200,14)形状数组。

在:

ip = [DataReader.x1, DataReader.x2, ...DataReader.x13]

DataReader.x1 是一个专栏,一个熊猫系列。它的.values 是一个一维数组,(200,) 形状。我希望 np.array(ip) 是一个 (13,200) 数组。

如果你已经完成了

ip.DataReader[['x1','x2',...,'x13']].values

结果将是一个 (200,13) 数组。

使用简单的数据框,您的代码不应产生错误:

In [61]: df = pd.DataFrame(np.arange(12).reshape(4,3), columns=['a','b','c'])  
In [63]: df.values                                                                      
Out[63]: 
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])
In [65]: ip = [df.a, df.b, df.c]   
In [67]: np.array(ip)                                                                   
Out[67]: 
array([[ 0,  3,  6,  9],
       [ 1,  4,  7, 10],
       [ 2,  5,  8, 11]])

np.matrix(ip).transpose() 也可以正常工作(尽管没有必要使用np.matrix 代替np.array)。

我无法重现您的错误。从某些形状数组的混合中创建array 会产生类似

的错误
ValueError: could not broadcast input array from shape (3) into shape (1)

或者在其他情况下是一个对象数组(系列)。

====

对于一列,我希望得到一维数组,或者根据需要进行整形。

In [82]: df.a                                                                           
Out[82]: 
0    0
1    3
2    6
3    9
Name: a, dtype: int64
In [83]: df.a.values                                                                    
Out[83]: array([0, 3, 6, 9])
In [84]: df.a.values[:,None]                                                            
Out[84]: 
array([[0],
       [3],
       [6],
       [9]])

【讨论】:

    猜你喜欢
    • 2016-01-02
    • 2013-09-12
    • 2020-10-15
    • 2016-09-20
    • 2021-07-24
    • 1970-01-01
    • 2017-10-13
    • 2021-10-12
    • 2020-05-04
    相关资源
    最近更新 更多