我有一个 .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
如何修复此错误?
最佳答案
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 表示
关于Python 值错误 : cannot copy sequence to array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53858840/