我有一个.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
如何解决此错误?
答案 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