我有一个 csv 文件,其中包含以下形式的数据:
Timestamp,Signal_1,Signal_2,Signal_3,Signal_4,Signal_5
2021-04-13 11:03:13+02:00,3,3,3,12,12
2021-04-13 11:03:14+02:00,3,3,3,12,12
现在我想创建一个神经网络来进行时间序列预测,所以为了做到这一点,我想将内容转换为一个 numpy 数组,以便我可以分配训练/测试集。 输入和输出应该是 5 维的(应该预测所有信号组)。目前我的代码如下所示:
import pandas
from matplotlib import pyplot
from sklearn.model_selection import train_test_split
from numpy import genfromtxt
filename = 'test.csv'
data = pandas.read_csv(filename , header=0, index_col=0)
my_data = genfromtxt('test.csv', delimiter=',')
print(data.shape)
print(type(my_data))
v, w, x, y, z = my_data
我知道缺少测试和训练部分的实际分配,但即使在这个阶段我也收到错误 ValueError: too many values to unpack (expected 5)
答案 0 :(得分:1)
不确定您要解压的确切部分(看起来您尝试使用 Pandas 导入一个版本,而使用 numpy 导入一个版本),但错误是因为您的 my_data.shape
= (3, 6)
,因为np.genfromtxt
不解释标头和时间戳列,这会导致 too many values to unpack
v, w, x, y, z = my_data
错误
array([[nan, nan, nan, nan, nan, nan],
[nan, 3., 3., 3., 12., 12.],
[nan, 3., 3., 3., 12., 12.]])
对于 numpy my_data
数组,您可以索引以删除第一行和第一列并转置以使其正确向上:
v, w, x, y, z = my_data[1:, 1:].T
这将为您提供一维数组:
>> v
array([3., 3.])
>> w
array([3., 3.])
>> x
array([3., 3.])
>> y
array([12., 12.])
>> z
array([12., 12.])
注意顺便说一句,如果您尝试使用 Pandas 数据框 data
(即 v, w, x, y, z = data
)做同样的事情,您实际上会得到分配的列标题字符串,而不是列本身。在这种情况下,您需要:
v, w, x, y, z = data.values.T
如果您也需要时间戳,使用 Pandas 导入可能更容易,因为它可以更轻松地处理混合数据,只需重置索引或从 index_col
调用中删除 read_csv
:
data = pandas.read_csv(filename, header=0)
u, v, w, x, y, z = df.values.T
这将为您提供 u
中的时间戳。