Python ValueError:无法将序列复制到数组

时间:2018-12-19 20:39:56

标签: python python-3.x pandas numpy

我有一个.csv数据集,其中的三列格式如下:

  t           X      Y
 0.040662  1.041667  1
 0.139757  1.760417  2
 0.144357  1.190104  1
 0.145341  1.047526  1
 0.145401  1.011882  1
 0.148465  1.002970  1

代替手动将其写为

x_final = np.array([1.041667, 1.760417, 1.190104, 1.047526, 1.011882, 1.002970])
v_observations = np.array([1, 2, 1, 1, 1, 1])

我想通过将pandas数据帧复制到数组来自动执行操作,这是我的代码

import numpy as np
from numpy.linalg import inv
import pandas as pd

df = pd.read_csv('testdata.csv')
print(df)

df.dropna(inplace=True)

X = df.drop('Y', axis=1)
y = df['Y']

time = df.drop('t', axis=1)
print(X)
d1= np.array([X])
d2 = np.array([y])

x_final = np.array([d1])
y_final = np.array([d2])
z = np.c_[x_final, y_final]

但是,尝试运行代码时出现此错误。

ValueError: cannot copy sequence with size 6 to array axis with dimension 2

如何解决此错误?

2 个答案:

答案 0 :(得分:0)

tl; dr:使用.values

您的问题是,当您创建numpy数组时,正在向它传递一个列表,而当我认为您试图向其传递一个数据框时:

# This doesn't work
np.array([X])
# This does
np.array(X)

因此您可以这样做:

d1= np.array(X)
d2 = np.array(y)

或更妙的是:

d1 = X.values
d2 = y.values

获得:

>>> d1
array([[0.040662, 1.041667],
       [0.139757, 1.760417],
       [0.144357, 1.190104],
       [0.145341, 1.047526],
       [0.145401, 1.011882],
       [0.148465, 1.00297 ]])
>>> d2
array([1, 2, 1, 1, 1, 1])

但是最后,您的最终结果将与简单地说完全相同:

z = df.dropna().values
>>> z
array([[0.040662, 1.041667, 1.      ],
       [0.139757, 1.760417, 2.      ],
       [0.144357, 1.190104, 1.      ],
       [0.145341, 1.047526, 1.      ],
       [0.145401, 1.011882, 1.      ],
       [0.148465, 1.00297 , 1.      ]])

请参见docs中的.values方法,该方法只为您提供数据帧的numpy表示形式

答案 1 :(得分:0)

a我认为您甚至不需要执行所有这些步骤。从熊猫数据帧到numpy二维数组的转换是无缝的。

df.dropna(inplace=True)
df_numpy = df.drop("t", axis=1).values